2012-02-28 3 views
0

Можно создать дубликат:
Environment.TickCount vs DateTime.NowДолжен ли я сделать класс оболочки для среды Environment.TickCount?

В моем приложении я требую быстрой операции синхронизации, но точность не так важна. Я проверил скорость выполнения трех операций синхронизации, для которых я знаком с и пришли с этими результатами:

for (int i = 0; i < 1000000; i++) 
{ 
    // var time = (DateTime.Now - dt).TotalMilliseconds; // 1131 ms 
    // var time = (Environment.TickCount - dt); // 7 ms 
    // var time = stopwatch.ElapsedMilliseconds; // 131 ms 
} 

Времена были проверены с помощью Stopwatch. Итак, я хочу использовать Environment.TickCount (я думаю!), Но его проблема в том, что после 24,9 дней, если пользователь очень не повезет, произойдет операция 2,147,483,647 - -2,147,483,648 и приведет к ошибке переполнения и сбою программы.

Итак, мой вопрос в два раза. Во-первых, это Environment.TickCount лучший инструмент для задания, заданный моими заданными целями, а во-вторых, кто-нибудь еще написал для него класс-оболочку, и если да, то как вы взяли на учет редкую вероятность переполнения?

+0

@AlexeiLevenkov: Да, я видел эту ветку, но большинство ответов предлагало использовать «Секундомер», и ни один из ответов не говорил о предлагаемых исправлениях к проблеме переполнения. –

+0

Вы действительно хотите использовать 'DateTime.Now.Ticks', поскольку он длинный, поэтому нет переполнения (по крайней мере, не для * очень * долгого времени). Тем не менее, вышеупомянутый вопрос, который вы задаете, вы бы не использовали 'Environment.TickCount', а' DateTime.Ticks'. – casperOne

+0

@RyanPeschel, BTW, вы видели, как Мэтью прокомментировал опрокидывание вопроса - переполнение автоматически заботится о опрокидывании. –

ответ

0

Хотя я думаю, что это дубликат обсуждения TickCount VS. сейчас ...

Является TickCount лучший инструмент, который Вы должны решить самостоятельно. Если 100 мс имеет значение для 1 миллиона операций, которые вы планируете измерить, возможно, но я сильно сомневаюсь, поскольку точность TickCount составляет 10 мс, средняя ошибка для этого будет равна приблизительно 5 мс * 10^6.

Я думаю, вы должны создать класс-оболочку для измерения времени, но в основном не для защиты от обхода, а для модульного тестирования вашего кода. Нелегко обмануть системные функции времени, но пользовательский класс может быть настроен для простоты использования и тестирования.

Смежные вопросы