powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как засечь время выполнения операции?
20 сообщений из 20, страница 1 из 1
Как засечь время выполнения операции?
    #32637699
smathcopm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нажимаем на кнопку, выполняется операция, по окончании показывается время, за каторое она была выполнена - как это осуществить?
...
Рейтинг: 0 / 0
Как засечь время выполнения операции?
    #32637702
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Засечь DateTime.Now в начале обработки и в конце, вычесть первое из второго :)

Ради пущей точности можно использовать DateTime.Now.Millisecond, вплоть до тиков(ticks).

Magnus
...
Рейтинг: 0 / 0
Как засечь время выполнения операции?
    #32637743
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если не устраивает и эта точность (msec), используй PerformanceCounter из System.Diagnostics
...
Рейтинг: 0 / 0
Как засечь время выполнения операции?
    #32637748
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну в общем да. Только там еще и тики есть DateTime.Now.Tiks - меньше думаю не будет :)

Magnus
...
Рейтинг: 0 / 0
Как засечь время выполнения операции?
    #32637760
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
к сожалению тики в datetime тикают не по 1, а сразу пачкой (WinApi GetSystemTimeAdjustment - через нее можно узнать размер пачки на каждый тик часов, которая прибавляется к текущему значению time-of-day часов )

PerformanceCounter'ы значительно точнее ...
...
Рейтинг: 0 / 0
Как засечь время выполнения операции?
    #32637778
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
<OFF>

сбор информации о производительности проводится через Api функции ZwCreateProfile/ZwSetIntervalProfile/ZwStartProfile/ZwStopProfile и др. Они используют Performance Monitoring Interrupt (PMI) процессора, и в обработчике этого прерывания собирают информацию о состоянии программы.
---
PS: Более подробную информацию можно найти в главе 15 "Debugging and Performance Monitoring", Volume 3, System Programming Guide, IA-32 Intel® Architecture Software Developer’s Manual.

</OFF>
...
Рейтинг: 0 / 0
Как засечь время выполнения операции?
    #32637783
smathcopm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо.
А чему равен один tick? Каждый раз получаю жуткие числа и не понимаю как их интерпретировать...
...
Рейтинг: 0 / 0
Как засечь время выполнения операции?
    #32637790
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1 тик = 100 наносекунд
...
Рейтинг: 0 / 0
Как засечь время выполнения операции?
    #32637815
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кузяк сожалению тики в datetime тикают не по 1, а сразу пачкой (WinApi GetSystemTimeAdjustment - через нее можно узнать размер пачки на каждый тик часов, которая прибавляется к текущему значению time-of-day часов )
Согласен, PerformanceCounter для этого и предназначены, и гораздо точнее. Но судя по задаче, человеку будет тостаточно секунд/десятых/сотых. А уж тики судя по его же словам это слишком :).

2 smathcopm
Примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
DateTime start= DateTime.Now;
for(int i = 0; i<=100; i++){
	Thread.Sleep(10);					
}

DateTime end = DateTime.Now;

Console.Write("Work completed in{0}", end-start);

Хотя можно еще доработать в зависимости от требуемой точности.
...
Рейтинг: 0 / 0
Как засечь время выполнения операции?
    #32637816
smathcopm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
... ни хрена себе точность, а как компьютер вообще может такое измерить? Он ориентируется на частоту процессора? (ну не может же быть, что биосовское время настолько точно "тикает") И как я заметил пачки этих tick-ов довольно большие - у меня несколько десятков тысяч штук за раз...
... вообщем-то мне так точно не надо, но не тики не милисекунды мне почему-то не дают того, что надо: всё время "0"... хотя проходит довольно много времени (около секунды), но иногда (ничего не меняя) вижу и правдивые результаты. Начало и конец отсчёта расставляю корректно... Может кто подскажет в чём может быть проблема...
...
Рейтинг: 0 / 0
Как засечь время выполнения операции?
    #32637819
smathcopm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Magnus23:
А этот sleep обязателен? Я всегда думал, что он тормозит выполнение операции, а мне только этого и не хватает. Моя задача - математические расчёты, поэтому требуется точность и скорость. Помню ещё на delphi мне слипы всю систему вешали...
...
Рейтинг: 0 / 0
Как засечь время выполнения операции?
    #32637825
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
smathcopm2Magnus23:
А этот sleep обязателен? Я всегда думал, что он тормозит выполнение операции, а мне только этого и не хватает. Моя задача - математические расчёты, поэтому требуется точность и скорость. Помню ещё на delphi мне слипы всю систему вешали...
Слип, нет конечно :). С его помощью я имитировал твои расчеты :), убери нафик.

На счет твоей проблемы. Опиши подробнее плиз. А лучше код кинь.
...
Рейтинг: 0 / 0
Как засечь время выполнения операции?
    #32637828
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... ни хрена себе точность, а как компьютер вообще может такое измерить? Он ориентируется на частоту процессора? (ну не может же быть, что биосовское время настолько точно "тикает") И как я заметил пачки этих tick-ов довольно большие - у меня несколько десятков тысяч штук за раз...
Как сказал Кузя, 1 тик = 100 наносекунд, так что , твой "раз" это для проца немеряно времени :)


Magnus
...
Рейтинг: 0 / 0
Как засечь время выполнения операции?
    #32637834
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
разрешающая способность обычного таймера (что на IBM PC AT, что на Intel Pentium IV) одна и таже ~ 54 миллисекуды. и если операции длятся менее этого периода, то, есте-но, получаешь 0

если на компютере есть так называемый "high-resolution performance counter", то время выполнения можно более точно засекать "в лоб" [без всяких performance counter прибамбасов].

см., например:
How To Use QueryPerformanceCounter to Time Code in Visual C# .NET
...
Рейтинг: 0 / 0
Как засечь время выполнения операции?
    #32637839
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
<OFF>
сейчас прогнал их пример на своей машине и получил 8.38 E-06 (против 10.82 E-06 в прилагаемом примере от MS).

хоть и было желание поменять процессор, то теперь малость поостыл :-)
не все так плохо, как оказалось ...

</OFF>
...
Рейтинг: 0 / 0
Как засечь время выполнения операции?
    #32639288
viper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще есть интересная статейка по поводу засекания интервалов меньших чем допускает системный таймер в мартовском MSDN Magazine.
_________________________________________________
Легче написать не правильную программу чем понять правильную (С) Alan Perlis
...
Рейтинг: 0 / 0
Как засечь время выполнения операции?
    #32639606
цштащкьы_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
http://www.rsdn.ru/forum/Message.aspx?mid=249579&only=1
...
Рейтинг: 0 / 0
Как засечь время выполнения операции?
    #32639721
smathcopm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В исходнике чёрт ногу сломит :), а программку кину. Она под ПК идёт, хоть и создаётся для КПК. Так вот после выполнения вычисления там внизу я хочу чтоб показывалось затраченное время.
А я так понимаю, что на КПК эти тики в такие пачки сгрупированы, что проще в годах измерять (шутка... с долей правды). Видимо по этому у меня ноль-то и выходил. Сейчас нет возможности проверить, попробую завтра.
P.S.: Программа очень сырая, но если вы мне выскажете свои замечания буду неимоверно признателен (я всё-таки не объективен).
...
Рейтинг: 0 / 0
Как засечь время выполнения операции?
    #32639786
smathcopm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для справки: Pocket PC 2003 с .Net версии 1.1 не знает ни милисекунд ни тиков и уж тем более PerformanceCounter реализовать на нем нереально - нет необходимых библиотек... Получается, что максимум возможного... секунды?
Меня не только КПК интересует, мне интересно, как ещё можно решить данную проблему...
...
Рейтинг: 0 / 0
Как засечь время выполнения операции?
    #32639895
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
smathcopm
Для справки: Pocket PC 2003 с .Net версии 1.1 не знает ни милисекунд ни тиков и уж тем более PerformanceCounter реализовать на нем нереально - нет необходимых библиотек... Получается, что максимум возможного... секунды?


См. /topic/97189&pg=1#718421
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как засечь время выполнения операции?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]