Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.08.24;
Скачать: [xml.tar.bz2];

Вниз

Быстродействие алгоритмов   Найти похожие ветки 

 
Dmitry87   (2008-07-17 16:15) [0]

Как определить время выполнения определеных алгоритмов в приложение (т.е. определить быстродействие алгоритма, где-то слышал что есть вроде директивы для этого).


 
Сергей М. ©   (2008-07-17 16:25) [1]

Одна и та же ветка одного и того же алгоритма в разных условиях среды исполнения даст разные результаты оценки времени исполнения.


 
Dmitry87   (2008-07-17 16:33) [2]

Но все же какой из представленных ниже алгоритмов рациональнее всего использовать, а то написал а какой лучше использовать не определюсь.

1.


procedure CopyDataFile(const Src, Dst: string);
var
 iFileHandle, oFileHandle: THandle;
 iFileLength: Integer;
 Buf: PChar;
begin
 iFileHandle := FileOpen(Src, fmOpenRead or fmShareDenyNone);
 try
   iFileLength := FileSeek(iFileHandle, 0, 2);
   GetMem(Buf, iFileLength);
   try
     FileRead(iFileHandle, Buf^, iFileLength);
     oFileHandle := FileOpen(Dst, fmOpenReadWrite or fmShareDenyNone);
     try
       FileWrite(oFileHandle, Buf^, iFileLength);
     finally
       FileClose(oFileHandle);
     end;
   finally
     FreeMem(Buf, iFileLength);
   end;
 finally
   FileClose(iFileHandle);
 end;
end;


2.


procedure CopyDataFileFStream(const Src, Dst: string);
var
 FI, FO: TFileStream;
begin
 FI := TFileStream.Create(Src, fmOpenRead or fmShareDenyNone);
 try
   FO := TFileStream.Create(Dst, fmCreate);
   try
     FO.CopyFrom(FI, FI.Size);
   finally
     FO.Free;
   end;
 finally
   FI.Free;
 end;
end;


3.


procedure CopyDataFile(const Src, Dst: string);
var
 S: TMemoryStream;
begin
 S := TMemoryStream.Create;
 try
   S.LoadFromFile(Src);
   S.SaveToFile(Dst);
 finally
   S.Free;
 end;
end;


4.


procedure CopyDataFile(const Src, Dsc: string);
var
 FI, FO: TextFile;
 s: string;
begin
 AssignFile(FI, Src);
 AssignFile(FO, Dsc);
 Reset(FI);
 try
   Rewrite(FO);
   try
     while not EOF(FI) do
     begin
       Read(FI, s);
       Write(FO, s);
     end;
   finally
     CloseFile(FO);
   end;
 finally
   CloseFile(FI);
 end;
end;


 
Поросенок Винни-Пух ©   (2008-07-17 16:35) [3]

вспомнилась басня про ослика и две копны.


 
Правильный$Вася   (2008-07-17 16:36) [4]

есть такое понятие - профайлеры
они этим и занимаются
ищи в гугле delphi profiler


 
Поросенок Винни-Пух ©   (2008-07-17 16:37) [5]

5. CopyFile("sorce","dest",false)


 
Jeer ©   (2008-07-17 17:31) [6]


> две копны.


Здесь их четыре - реально невозможно выбрать, чем же копировать.

P.S.
Ознакомится с GetTickCount, QueryPerfomanceCounter(), rdtsc..


 
stas ©   (2008-07-17 20:07) [7]

3-й отпадает сразу, ты весь файл тянешь в ОП что нехорошо.


 
stas ©   (2008-07-17 20:10) [8]

А что его определять
Перед запуском процедуры запомнил в одну переменную текущее время
По завершению запомнил время в другую переменную, вывел разницу.


 
Правильный$Вася   (2008-07-17 20:20) [9]


> А что его определять

слишком многопосторонних факторов
винда может невовремя начать свопиться
у винта кэш переполнится
для файлов разного порядка размера может оказаться разный лучший алгоритм (например, для маленьких - один, для больших - другой)
...
чистый эксперимент тяжело поставить, толькомногократным повторениеми выведением среднего


 
stas ©   (2008-07-17 20:29) [10]

Правильный$Вася   (17.07.08 20:20) [9]
я циклом когда-то делал и считал среднее фрифметическое, только не копирование файлов, а что-то другое.


 
Anatoly Podgoretsky ©   (2008-07-17 22:48) [11]

> Dmitry87  (17.07.2008 16:33:02)  [2]

procedure CopyDataFile(const Src, Dst: string);
procedure CopyDataFile(const Src, Dsc: string);

В одном строк и операций меньше, но памяти больше, во втором наоборот.
А у тебя какой критений.
Что такое лучше?

Кроха сын к отцу пришел
и сказала кроха
Пися в писю холошо
Пися в попу плохо.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.08.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.046 c
2-1216626771
Denis__
2008-07-21 11:52
2008.08.24
Что использовать вместо StringGrid?


2-1216324121
alexda
2008-07-17 23:48
2008.08.24
Socket Error


15-1215601167
SoundB
2008-07-09 14:59
2008.08.24
SQL


3-1204262172
Kehnzo
2008-02-29 08:16
2008.08.24
Вопросы по DBGrid


6-1192557976
Rembo
2007-10-16 22:06
2008.08.24
TIdIcmpClient количество посланных байт





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский