Всем здрасте.Собсно вот прикол,хочу замерить время выполнения считывания файла,нашел что якобы вставляешь нужный код между двумя вызовами gettickcount вот что сделал я: Code: procedure TForm1.Button1Click(Sender: TObject); var f:textfile; i,j,n:int64; s:string; begin I:=gettickcount; assignfile(f,'1.txt'); reset(f); while not eof(f) do begin readln(f,s); j:=gettickcount; n:=j-i; showmessage(inttostr(n)); end; closefile(f); end; end. есть пара вопросов: 1)пробую читать через filestream таким кодом fa:=tfilestream.create('1.txt',fmopenread); fa.Seek(0,soFromBeginning); fa.read(buffer,sizeof(buffer)); fa.free и вставляю этот код.показывает 0. собсно как замерять чтение через именно файлстрим и второе:как токо запустил прогу,нажал на кнопку,она начала читать файл размером 3+ мб. и выдала значение 7000 мс. по второму нажатию(уже то-бишь запущена была) выдало рез-ат в 2500 мс. вопрос правильно ли она делала замеры?то есть правилен ли код что описан выше?.
Не совсем правильный код. Все это Code: j:=gettickcount; n:=j-i; showmessage(inttostr(n)); Должно выполняться 1 раз, после цикла, а не в самом цикле, как сейчас. Также закрывать файл Code: closefile(f); желательно сразу после завершения цикла, перед выводом результатов. Для более точного измерения, повторяй все действия, которые между Code: I:=gettickcount; j:=gettickcount; 1000 раз и более.
а для еще более точного измерения можно заюзать апишки QueryPerformanceFrequency, QueryPerformanceCounter и получать результат с точностью до наносекунд.
смотри после readln я завершаю цикл,закрываю файл,провожу подсчеты,но та же хрень остается что оно потом уже другие значения выдает. з.ы. а с файлстримом как быть? upd оно начало выдавать на 2мб. файл по ~ 2 сек. это нормально? походу что то юзает хард раз разные показатели... знаю,но мне надо жирные файлы считывать,там уже такая точность не нужна.
в слушности да,однако на жирных файлах проверял,так что там время считывания явно больше 1 сек.Я походу понял что при чтении через filesteam цикла конкретного там нет,мб по этому вываливает 0,проверю считывание на апи,посмотрим что выдаст.
В книге Рихтера "Windows для профессионалов: создание эффективных Win32 приложений с учетом специфики 64-разрядной версии Windows" есть глава о измерении времени работы процесса, а так же представлен код класса на С++ (не нашел онлайн вариант книги, так бы скинул ссылку)
к томуже скорость файловый операций бесполезно замерять, потому что файлы кешируются операционной системой. т.е. можно считать файл 200 метровый. Закрыть, а потом опять считать. то с большой вероятность скорость увеличится в 2-3 раза. за счет использования кеша. бывает что и в 10 раз может увеличится.
begin_end спс,прочту. slesh первоначальное чтение показывает правильно(то есть сразу, потом уже выдает значение в 2 р. меньше как ты и сказал), но с другими методами работать не хочет.