![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Быстродействие алгоритмов
Dmitry87 © (2008-07-17 16:15:00)Как определить время выполнения определеных алгоритмов в приложение (т.е. определить быстродействие алгоритма, где-то слышал что есть вроде директивы для этого).
Anatoly Podgoretsky (2008-07-17 22:48:00) [1]> Dmitry87 (17.07.2008 16:33:02) [2]
procedure CopyDataFile(const Src, Dst: string);
procedure CopyDataFile(const Src, Dsc: string);
В одном строк и операций меньше, но памяти больше, во втором наоборот.
А у тебя какой критений.
Что такое лучше?
Кроха сын к отцу пришел
и сказала кроха
Пися в писю холошо
Пися в попу плохо.
stas (2008-07-17 20:29:00) [2]Правильный$Вася (17.07.08 20:20) [9]
я циклом когда-то делал и считал среднее фрифметическое, только не копирование файлов, а что-то другое.
Правильный$Вася (2008-07-17 20:20:00) [3]
> А что его определять
слишком многопосторонних факторов
винда может невовремя начать свопиться
у винта кэш переполнится
для файлов разного порядка размера может оказаться разный лучший алгоритм (например, для маленьких - один, для больших - другой)
...
чистый эксперимент тяжело поставить, толькомногократным повторениеми выведением среднего
stas (2008-07-17 20:10:00) [4]А что его определять
Перед запуском процедуры запомнил в одну переменную текущее время
По завершению запомнил время в другую переменную, вывел разницу.
stas (2008-07-17 20:07:00) [5]3-й отпадает сразу, ты весь файл тянешь в ОП что нехорошо.
Jeer (2008-07-17 17:31:00) [6]
> две копны.
Здесь их четыре - реально невозможно выбрать, чем же копировать.
P.S.
Ознакомится с GetTickCount, QueryPerfomanceCounter(), rdtsc..
Поросенок Винни-Пух (2008-07-17 16:37:00) [7]5. CopyFile('sorce','dest',false)
Правильный$Вася (2008-07-17 16:36:00) [8]есть такое понятие - профайлеры
они этим и занимаются
ищи в гугле delphi profiler
Поросенок Винни-Пух (2008-07-17 16:35:00) [9]вспомнилась басня про ослика и две копны.
Dmitry87 (2008-07-17 16:33:00) [10]Но все же какой из представленных ниже алгоритмов рациональнее всего использовать, а то написал а какой лучше использовать не определюсь.
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:25:00) [11]Одна и та же ветка одного и того же алгоритма в разных условиях среды исполнения даст разные результаты оценки времени исполнения.