Форум: "Начинающим";
Текущий архив: 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