Текущий архив: 2006.11.26;
Скачать: CL | DM;
Вниз
VCL2MCK Найти похожие ветки
← →
sff © (2006-02-10 09:55) [0]Можно ли переделать (как нибудь полегче) существующий VCL проект в MCK проект?
← →
Barloggg (2006-02-10 10:41) [1]хмм... а куда делся BaryVetal?
он же вроде занялся конвертером?
А вообще недоконвертер есть, где-то в архивах.
← →
Vedun (2006-02-10 18:56) [2]Конвертер уже существует. И даже конвертирует прстые проекты. Однако работы еще много. Некоторое время назад BaryVetal приостановил работу над проектом. Не знаю, как обстоят дела сейчас. Надо-бы с ним связаться...
← →
Vedun (2006-02-10 19:02) [3]Только конвертер переделывает VCL не в MCK, а в чистый KOL.
← →
Thaddy (2006-02-10 22:09) [4]As it should be ;)
Serious: that would be a VERY difficult thing to do, since you have to maintain and convert two sets of files: one the mirror set for the VCL and the other the plain kol project.
I am working for years now to create a 100% KOL solution, but I may grow a beard longer than Vladimir"s before it is finished ;)
Two way tools for KOL without MCK is almost not possible without RTTI, although the windows API class level has some possibilities with get/set windowlong and my small recreate routine for KOL. Let alone with MCK.
← →
BaryVetaL © (2006-02-13 10:02) [5]Возвращаюсь... :-)
Конвертор пришлось не надолго отложить, просто я был у научного руководителя (кто не знает о чем я: у меня диплом по оптимизации программ на Delphi) и он очень доволен той работой которую я проделал, а так волки сыты, то и овцы не временно не думают про конвертор :-)))
На днях выложу на всеобщее обозрение.
Также я еще кое-что сделал, но этого я еще ни кому не показывал: я написал свой встраиваемый профайлер (средство для измерения времени работы блоков программы для дальнейшей оптимизации). Для чего он нужен? Ну предположим вы написали функцию, которая, к примеру, считает количество счастливых билетов (очень не оптимально), вы понимаете, что она работает не оптимально и можно ее ускорить (что нибудь заменить, удалить и т.д.), но не знаете с чего начать. Самое время воспользоваться профайлером!
// Пример:
//procedure TForm1.Button1Click( Sender: TObject );
//var
// S: string;
// i: Integer;
// j: Integer;
//begin
// Edit1.Text := "0";
// i := 0;
// j := GetTickCount;
// while i <= 999999 do begin
// ProfilerStart( "IntToStr" );
// S := IntToStr( i );
// ProfilerEnd( "IntToStr" );
// ProfilerStart( "Цикл while" );
// while Length( S ) <> 6 do
// S := "0" + S;
// ProfilerEnd( "Цикл while" );
//
// ProfilerStart( "Главное условие" );
// if StrToInt( S[ 1 ] ) + StrToInt( S[ 2 ] ) + StrToInt( S[ 3 ] ) = StrToInt( S[ 4 ] ) + StrToInt( S[ 5 ] ) + StrToInt( S[ 6 ] ) then begin
// Edit1.Text := IntToStr( StrToInt( Edit1.Text ) + 1 );
// end;
// ProfilerEnd( "Главное условие" );
//
// ProfilerStart( "Увеличение ProgressBar" );
// ProgressBar1.Position := Trunc( i * 100 / 999999 );
// ProfilerEnd( "Увеличение ProgressBar" );
//
// ProfilerStart( "Application+Inc(i)" );
// Application.ProcessMessages;
// i := i + 1;
// ProfilerEnd( "Application+Inc(i)" );
// end;
// Label2.Caption := IntToStr( GetTickCount - j );
// ProgressBar1.Position := 0;
// ShowProfiler;
//end;
// Результат:
//
// Результат работы профайлера
// Файл: C:\Program Files\Borland\Delphi6\Projects\Diplom\Задачи на оптимальность в диплом\Неоптимальная\Project1.exe
// --------------------------------------------------------------
//| Секция | Application+Inc(i)
//| Мин время | 0.000001 сек
//| Макс время | 0.001462 сек
//| Средн время | 0.000006 сек
//| Вызовов | 1000000
//| Общее время | 5.802796 сек
// --------------------------------------------------------------
//| Секция | Увеличение ProgressBar
//| Мин время | 0.000004 сек
//| Макс время | 0.006566 сек
//| Средн время | 0.000004 сек
//| Вызовов | 1000000
//| Общее время | 3.954001 сек
// --------------------------------------------------------------
//| Секция | Главное условие
//| Мин время | 0.000003 сек
//| Макс время | 0.001522 сек
//| Средн время | 0.000006 сек
//| Вызовов | 1000000
//| Общее время | 5.743231 сек
// --------------------------------------------------------------
//| Секция | Цикл while
//| Мин время | 0.000001 сек
//| Макс время | 0.001506 сек
//| Средн время | 0.000001 сек
//| Вызовов | 1000000
//| Общее время | 1.260588 сек
// --------------------------------------------------------------
//| Секция | IntToStr
//| Мин время | 0.000002 сек
//| Макс время | 0.001015 сек
//| Средн время | 0.000002 сек
//| Вызовов | 1000000
//| Общее время | 2.430998 сек
// --------------------------------------------------------------
//
// - - - - - - - - - - - - - Диаграмма - - - - - - - - - - - - - -
// --------------------------------------------------------------
//Application+Inc(i) |******************************************************************************* *********************100%
//Увеличение ProgressBar |********************************************************************68%
//Главное условие |******************************************************************************* *******************98%
//Цикл while |*********************21%
//IntToStr |*****************************************41%
//
// Приведенная диаграмма показывает продолжительность работы каждого блока
Это жуть какой неоптимальные подсчет!
Но наглядно показывает что занимает больше всего времени...
Модуль может работать как с VCL так и с KOL. Саму идею спер у одного профилировшика jdPro кажется... Но мне очень не нравилось как он работал, да и отчет получался не очень... А тут... Единственное что еще хотелось бы подправить это может как нибудь оптимизировать сам модуль :-) Туда дальше сделаю. Ладно ссылка на модуль:
http://www.rfms.adygnet.ru/Profiler.rar
Убедительная просьба если внесете в модуль какие нибудь изменения не ленитесь напишите мне...
PS для гуру: можете не смотреть если вы в программировании ас, то такие штуки вам ни к чему. У аса в голове ответ. А профайлер предназначен для новичков...
Страницы: 1 вся ветка
Текущий архив: 2006.11.26;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.035 c