Диспетчер Таймер и Таймер

Я столкнулся со странной вещью в своем приложении WPF. Я экспериментировал с классами DispatcherTimer и System.Timers.Timer и сравнивал время, потраченное на секундомер. Когда я использую DispatcherTimer, кажется, что почти нет разницы в интервале, отображаемом моим приложением, а также секундомером (проверено в течение 30 минут). Но когда я использую другой таймер, я значительно теряю время в своем приложении. Я мог бы использовать DispatcherTimer, но вот проблема: когда я обновляю свой пользовательский интерфейс из другого места, таймер диспетчера, кажется, зависает на этот конкретный интервал и, следовательно, он также теряет время. Почему это происходит и как это исправить?


person androider    schedule 19.06.2014    source источник
comment
Этот вопрос, возможно, поможет.   -  person Joey    schedule 19.06.2014
comment
Нет, я действительно написал после прочтения той ссылки. Я не понимаю, почему System.Threading.Timer теряет примерно столько времени. 3сек. через 5 мин. в то время как диспетчер ничего не теряет. если мой какой-то другой процесс вызывал эту задержку, то он также должен отражаться в диспетчере, я думаю   -  person androider    schedule 19.06.2014
comment
Как правило, с таймерами все они используются по-разному. Вот почему я связал этот вопрос. Более того, я бы никогда не ожидал, что таймеры будут точными. Будут ли они, зависит от многих вещей, например системная нагрузка.   -  person Joey    schedule 19.06.2014
comment
но все равно 2 сек. (или больше) через 5 мин. много терять. Еще есть предложения?   -  person androider    schedule 19.06.2014


Ответы (1)


В комментариях @Joey предположил, что может помочь ответ на вопрос Сравнение таймера с DispatcherTimer. Ваш ответ был

Нет, я действительно написал после прочтения той ссылки. Я не понимаю, почему System.Threading.Timer теряет примерно столько времени. 3сек. через 5 мин. в то время как диспетчер ничего не теряет. если мой какой-то другой процесс вызывал эту задержку, то он также должен отражаться в диспетчере, я думаю

Однако если вы прочитали ответ на связанный вопрос, значит, вы уже получили свой ответ. Как там сказано, это потому, что класс Timer оптимизирован для работы с приложениями Windows Forms, и вы используете его в приложении WPF. Это немного похоже на вождение машины по песку ... мы не должны этого делать, и мы можем получить неожиданные результаты.

Я предлагаю вам просто использовать правильный инструмент для работы. Также стоит отметить, что никакие компьютерные таймеры или даже класс Stopwatch, который вы используете для получения результатов теста, не будут точными на 100%, поскольку процессор, на котором он работает, также будет использоваться для запуска. многие другие потоки одновременно.

person Sheridan    schedule 19.06.2014