Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Скорость


Igor_thief ©   (2005-01-10 16:11:00) 

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


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

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


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

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


Eraser   (2005-01-12 13:35:00) [3]

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


kaZaNoVa   (2005-01-12 13:09:00) [4]

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


kaZaNoVa   (2005-01-12 13:08:00) [5]

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



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);
-----


Igor_thief   (2005-01-12 12:11:00) [6]

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


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

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


begin...end   (2005-01-11 20:52:00) [8]

> [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.


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

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%


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

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


Anatoly Podgoretsky   (2005-01-10 16:20:00) [11]

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


begin...end   (2005-01-10 16:13:00) [12]

> Igor_thief   (10.01.05 16:11)

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


Наверх

Титульная страница Поиск, карта сайта Написать письмо