Nano Hash - криптовалюты, майнинг, программирование

C# System.Windows.Forms.timers, почему они так опаздывают?

У меня была программа, в которую в короткие сроки нужно было встроить заставку. Приложение уже использовало таймер System.Windows.forms на основе коротких интервалов. около 100 mils, но он работает на быстром оборудовании, а ширина кода в этом интервале короткая, поэтому эта часть никогда не вызывала проблем с задержкой.

Заставка должна была сработать через 30 минут. Для тестирования я добавил еще одну настройку Forms.timer на 6000 mils. Как в режиме отладки, так и в версии Release эти 6000 миль заняли около 11 секунд. Я нахожу это довольно ненадежным. Нет никаких указаний на то, что какая-либо часть этой программы работает медленно или требует высокой загрузки процессора, и я проверил это, поскольку она должна была работать быстро (и все это работает быстро), за исключением заставки (простая черная форма шириной графика) показывает примерно в два раза больше времени. Так ли ненадежны таймеры формы?

18.12.2017

  • Может быть, ваш код использует thread.sleep? что делает невозможным вход в очередь времени форм 19.12.2017

Ответы:


1

System.Windows.Forms.Timer действует в основном как оболочка собственного сообщения WM_TIMER. Это означает, что его сообщения помещаются в очередь сообщений UI-потока во время, примерно близкое к установленному значению Interval. Этот тип сообщения имеет меньший приоритет по сравнению с другими сообщениями, такими как ввод данных пользователем, тяжелое дыхание и тому подобное. Это означает, что оно менее важно и обрабатывается в зависимости от других сообщений, существующих в очереди, и от того, сколько времени требуется для обработки последних.

Кроме того, MSDN утверждает, что:

Компонент Windows Forms Timer является однопоточным, и его точность ограничена 55 миллисекундами. Если вам требуется многопоточный таймер с большей точностью, используйте класс Timer в пространстве имен System.Timers.

Вам следует выбрать более отзывчивый класс таймера, на который не распространяются такие ограничения, как, например, System.Timers.Timer или System.Threading.Timer. Оба они могут использоваться в интерфейсных приложениях (особенно первое, которое наследуется от Component) и вызывать свои события, используя подход объединения потоков.

18.12.2017
  • но он сообщает, что 11 секунд вместо 6, должно быть, еще должно быть, я думаю 19.12.2017
  • Причина первая. Приоритет. 19.12.2017
  • Это имело бы смысл, если бы он блокировал или выполнял тяжелую работу в потоке пользовательского интерфейса. Однако, если он просто находится в цикле простоя, как и большинство приложений пользовательского интерфейса, у таймера нет причин для задержки. 19.12.2017
  • ну, я думаю, вы правы, задержка также может быть вызвана тем, что у заставки было некоторое время запуска (из-за его графических эффектов), и это могло быть около 5 секунд, потому что, когда я тестировал заставку с более длительным временем, она ушла . Но я вознаграждаю вас за то, что основные циклы должны быть проверены. 20.12.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..