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

Попытка определить FPS в программе C # WPF

Я пишу приложение для сенсорной таблицы с использованием WPF и C #. (И я не очень хорошо знаком с WPF. Совсем.) Мы подозреваем, что мы не получаем частоту кадров, которую «запрашиваем» у API, поэтому я пытаюсь написать свой собственный калькулятор FPS. Я знаю математику, чтобы вычислить его на основе внутренних часов, я просто не знаю, как получить доступ к таймеру в Windows / WPF API.

Какие библиотеки / команды мне нужны, чтобы получить доступ к таймеру?

10.11.2010

Ответы:


1

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

10.11.2010
  • Секундомер сделал свое дело. Я просто отслеживаю ElapsedMilliseconds во время приложения - не нужно останавливать / запускать каждый тик. 11.11.2010
  • какой математический расчет для расчета FPS с помощью StopWatch, пожалуйста? 27.02.2018

  • 2

    Хотя вы можете использовать DispatcherTimer (который направляет свои тики в поток пользовательского интерфейса, вызывая проблемы с относительностью) или System.Threading.Timer (который может вызвать исключение, если вы попытаетесь коснуться каких-либо элементов управления пользовательского интерфейса), я бы порекомендовал вам просто используйте инструменты профилирования WPF :)

    10.11.2010

    3

    Прежде всего, знаете ли вы, что Microsoft предоставляет бесплатный диагностический инструмент, который сообщит вам частоту кадров, с которой WPF обновляет экран? Думаю, если вы не уверены, что получаете запрашиваемую частоту кадров, то, возможно, вы не доверяете этому, но я считаю, что это надежный инструмент. Он называется Perforator и является частью WPF Performance Suite, который вы можете получить, следуя инструкциям здесь: http://msdn.microsoft.com/library/aa969767

    Это, наверное, проще, чем написать свое собственное.

    Кроме того, как именно вы «запрашиваете» частоту кадров? Какой API вы используете? Вы используете свойство DesiredFrameRate временной шкалы? Если да, то это чаще используется для уменьшения частоты кадров, чем для ее увеличения. (В документации также говорится об увеличении частоты кадров, чтобы избежать разрывов кадров, но это не имеет особого смысла - разрыв вызван несинхронизацией кадров с монитором и не является артефактом низкой частоты кадров. В любом случае в Vista или Windows 7 вы не получите разрывов при включенном DWM.) Это всего лишь подсказка, и WPF не обещает соответствовать рекомендуемой частоте кадров.

    Что касается техники измерения, вы можете пойти разными путями. Если вы просто пытаетесь выяснить, находится ли частота кадров на правильном уровне, вы можете просто увеличить счетчик один раз за кадр (что обычно вы делаете в обработчике событий для CompositionTarget.Rendering) и настроить DispatcherTimer для запуска один раз в секунду, чтобы он отображал значение в пользовательском интерфейсе, а затем сбросил счетчик. Он будет несколько грубым и готовым, поскольку DispatcherTimer не совсем точен, но он покажет вам, например, есть ли у вас 15 кадров в секунду, когда вы ожидали 30 кадров в секунду.

    Если вы пытаетесь получить более точное представление (например, вы хотите попытаться выяснить, визуализируются ли кадры постоянно, или если вам кажется, что кадры время от времени теряются), то это становится немного сложнее. . Но я подожду, чтобы увидеть, сможет ли Perforator помочь вам, прежде чем делать дополнительные предложения.

    10.11.2010

    4

    Вы хотите либо обернуть вызовы синхронизации win32, которые вы обычно вызываете (например, QueryPerformanceCounter), с помощью p / Invoke, либо использовать что-то в .NET, что уже обертывает их.

    Вы можете использовать DateTime.Ticks, но это, вероятно, недостаточно высокое разрешение. Класс Stopwatch скрытно использует QueryPerformanceCounter.

    Если вам нужно что-то, что можно многократно использовать во многих системах, а не простая диагностика, имейте в виду, что проблемы, связанные с процессором, связаны с QPC и секундомером. См. Этот вопрос: Может ли класс .NET Stopwatch быть НАСТОЯЩИМ ужасным?

    10.11.2010
    Новые материалы

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

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

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

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

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

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

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