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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.038 c
3-1102934638
Levitch
2004-12-13 13:43
2005.01.23
Руссификация базы данных


3-1103574058
Макс
2004-12-20 23:20
2005.01.23
Сложный запрос с вложенными запросами для Access (ADO)


1-1105456604
sever
2005-01-11 18:16
2005.01.23
Вопрос по созданию классов


4-1102421435
Erazser
2004-12-07 15:10
2005.01.23
Как сделать чтобы окно передвинулось на передний план?


1-1105368908
serg128
2005-01-10 17:55
2005.01.23
Как результаты вывода команды ping перенаправить в Memo?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский