Прежде всего, знаете ли вы, что 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