Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.23;
Скачать: CL | DM;

Вниз

Скорость   Найти похожие ветки 

 
Igor_thief   (2005-01-10 16:11) [0]

Будет ли процесс обработки проходить быстрее, если все операции которые выполняются в одном цикле разбить на несколько циклов. Например: в одном цикле выполняется открытие таблицы Excel, пошаговое считывание данных с нее и сразу же идет их обработка, запись в БД и в другую Excel таблицу. Будет ли быстрее сделать так: сначала в цикле открыть таблицу Excel, по ходу считывать данные и преобразовав их, писать в БД. Потом в другом цикле писать из БД в выходную таблицу Excel?


 
begin...end ©   (2005-01-10 16:13) [1]

> Igor_thief   (10.01.05 16:11)

Время выполнения двух вариантов можно измерить.


 
Anatoly Podgoretsky ©   (2005-01-10 16:20) [2]

Время = Время выполнения пустого цикла + Время на выполнение действий. Второе константа, а перовое умножается на N


 
Piter ©   (2005-01-10 16:53) [3]

Да, теория без практика мертва


 
Igor_thief   (2005-01-11 20:39) [4]

begin...end ©   (10.01.05 16:13) [1]
Подскажи каким способом, плиз.
Anatoly Podgoretsky ©   (10.01.05 16:20) [2]
Что за N?

> Время выполнения пустого цикла
Это сколько?

> Время на выполнение действий

Как выщитать?
Piter ©   (10.01.05 16:53) [3]
Время на выполнение действий

100%


 
begin...end ©   (2005-01-11 20:52) [5]

> [4] Igor_thief   (11.01.05 20:39)

> Подскажи каким способом, плиз.

var
 T: Cardinal;
begin
 T := GetTickCount;
 // Здесь - исследуемый код
 T := GetTickCount - T;
 ShowMessageFmt("Код выполнялся в течение %d миллисекунд", [T])
end.


Если код выполняется слишком быстро (получающееся значение T близко к нулю), то можно его прогонять не один раз (разумеется, тот вариант кода, с которым производится сравнение, тоже нужно будет выполнить столько же раз). Например:

const
 CycleCount = 1000;
var
 I: Integer;
 T: Cardinal;
begin
 T := GetTickCount;
 for I := 1 to CycleCount do
   // Здесь - исследуемый код
 T := GetTickCount - T;
 ShowMessageFmt("%d повторений кода выполнялись в течение %d миллисекунд", [CycleCount, T])
end.


 
Vasya.ru ©   (2005-01-12 00:52) [6]

в одном цикле выполняется открытие таблицы Excel,
а вот это нехорошо
В смысле нехорошо открывать/закрывать в цикле. Это надо делать ДО цикла


 
Igor_thief   (2005-01-12 12:11) [7]

Vasya.ru ©   (12.01.05 0:52) [6]
Всем большое спасибо.


 
kaZaNoVa ©   (2005-01-12 13:08) [8]

вот можно ТОЧНО мерять время ;))



procedure taimer(a:boolean);
Begin
if a then begin
p:=gettickcount; QueryPerformanceFrequency(h); QueryPerformanceCounter(k);
end else begin
QueryPerformanceCounter(n);
MessageBox(0,"Ready",Pchar(Inttostr(gettickcount-p)+" ms    ("+(Inttostr(round(1000000*(n-k)/h)))+") microsec"),0);
end;end;

----
begin
taimer(true);
//работаем ..
taimer(false);
-----


 
kaZaNoVa ©   (2005-01-12 13:09) [9]

kaZaNoVa ©   (12.01.05 13:08) [8]
Var
k,n,h,p:int64;


 
Eraser ©   (2005-01-12 13:35) [10]

Не стоит гнаться за скоростью, если это сильно запутает программу! Лучше выполнять операции с базой данных отдельно, с Exel отдельно, т.к. при, например, перебое с эл. питанием может пострадать и то и другое. Да и вообще надо придерживаться чёткой структуры иначе через месяц сам не разберёшь что писал, не говоря о других...


 
Igor_thief   (2005-01-12 13:42) [11]

Eraser ©   (12.01.05 13:35) [10]
Отчасти ты прав. Действительно надо следит за читаельностью кода. Но ведь иногда надо написать код который будет немного трудочитаем (но зато стабилен на столько, что если и когда то прейдется к нему заглянуть, то это будет ну очень не скоро), но зато быстроисполняем :), потомучто народ то будет пользоваться программой, а не ее исходником.
kaZaNoVa ©   (12.01.05 13:08) [8]
Спасибо, я потестирую.


 
Eraser ©   (2005-01-12 13:46) [12]

Igor_thief
И всё таки мне кажется, что надо писать раздельно, потому что даже физически винчестер быстрее читает непрерывные данные, чем из разных кусков, т.е. при достаточном объёме ОЗУ, быстрее сначала прочитать данные в память, произвести вычисления, и записать данные на винт.



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

Текущий архив: 2005.01.23;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.035 c
4-1102268962
8ung
2004-12-05 20:49
2005.01.23
Две клавиауры


1-1105430544
AndyDel
2005-01-11 11:02
2005.01.23
Компонент типа Object Inspectora


14-1104590246
vopros
2005-01-01 17:37
2005.01.23
Уберите их с экрана пожайлуста


14-1105083779
Чеширский_Кот
2005-01-07 10:42
2005.01.23
Дмитрий Скляров


1-1104927198
lelik93
2005-01-05 15:13
2005.01.23
Delphi 7 & russian fonts under XP