gettickcount

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by DooD, 6 Oct 2011.

  1. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    Всем здрасте.Собсно вот прикол,хочу замерить время выполнения считывания файла,нашел что якобы вставляешь нужный код между двумя вызовами 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 мс. вопрос правильно ли она делала замеры?то есть правилен ли код что описан выше?.
     
    #1 DooD, 6 Oct 2011
    Last edited: 6 Oct 2011
  2. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    937
    Likes Received:
    162
    Reputations:
    27
    Не совсем правильный код.
    Все это
    Code:
    j:=gettickcount;
    n:=j-i;
    showmessage(inttostr(n));
    Должно выполняться 1 раз, после цикла, а не в самом цикле, как сейчас. Также закрывать файл
    Code:
    closefile(f);
    желательно сразу после завершения цикла, перед выводом результатов.
    Для более точного измерения, повторяй все действия, которые между
    Code:
    I:=gettickcount;
    j:=gettickcount;
    1000 раз и более.
     
  3. Ins3t

    Ins3t Харьковчанин

    Joined:
    18 Jul 2009
    Messages:
    939
    Likes Received:
    429
    Reputations:
    139
    а для еще более точного измерения можно заюзать апишки QueryPerformanceFrequency, QueryPerformanceCounter и получать результат с точностью до наносекунд.
     
  4. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    смотри после readln я завершаю цикл,закрываю файл,провожу подсчеты,но та же хрень остается что оно потом уже другие значения выдает.
    з.ы. а с файлстримом как быть?
    upd оно начало выдавать на 2мб. файл по ~ 2 сек. это нормально?
    походу что то юзает хард раз разные показатели...

    знаю,но мне надо жирные файлы считывать,там уже такая точность не нужна.
     
    #4 DooD, 6 Oct 2011
    Last edited by a moderator: 6 Oct 2011
  5. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    в слушности да,однако на жирных файлах проверял,так что там время считывания явно больше 1 сек.Я походу понял что при чтении через filesteam цикла конкретного там нет,мб по этому вываливает 0,проверю считывание на апи,посмотрим что выдаст.
     
  6. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    смотри в 1-ом посте я писал как я читал,так то оно читает,проверил,только буфером был массив чаров.
     
  7. begin_end

    begin_end Green member

    Joined:
    4 Jan 2007
    Messages:
    259
    Likes Received:
    596
    Reputations:
    476
    _________________________
    1 person likes this.
  8. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    В книге Рихтера "Windows для профессионалов: создание эффективных Win32 приложений с учетом специфики 64-разрядной версии Windows" есть глава о измерении времени работы процесса, а так же представлен код класса на С++ (не нашел онлайн вариант книги, так бы скинул ссылку)
     
    _________________________
  9. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    к томуже скорость файловый операций бесполезно замерять, потому что файлы кешируются операционной системой. т.е. можно считать файл 200 метровый. Закрыть, а потом опять считать. то с большой вероятность скорость увеличится в 2-3 раза. за счет использования кеша. бывает что и в 10 раз может увеличится.
     
  10. DooD

    DooD Elder - Старейшина

    Joined:
    30 Sep 2010
    Messages:
    1,168
    Likes Received:
    450
    Reputations:
    288
    begin_end спс,прочту.
    slesh первоначальное чтение показывает правильно(то есть сразу, потом уже выдает значение в 2 р. меньше как ты и сказал), но с другими методами работать не хочет.