У меня есть приложение WinForms, которое использует XNA для анимации 3D-моделей в элементе управления. Приложение работало месяцами, но в последнее время я начал испытывать периодические паузы в анимации. Отправляясь расследовать, что происходит, я установил следующие факты:
- Это происходит только на моей машине, другие машины работают нормально
- Удаление всего из моего цикла рендеринга не решает проблему
В 2. На самом деле я не удалил всего , я ограничил свой цикл, чтобы установить область просмотра на моем GraphicsDevice, а затем выполнить GraphicsDevice.Present.
Пытаясь копать дальше, я запустил PIX, чтобы получить некоторую статистику. Скриншоты двух прогонов PIX можно посмотреть здесь (Run6) и здесь (Run14) . Run6 использует мой оригинальный цикл рендеринга, а Run14 использует простой цикл Present.
PIX говорит мне, что графический процессор периодически делает что-то , и я предполагаю, что это вызывает паузы. Что может быть причиной этого? Или как мне узнать, что на самом деле делает GPU?
Обновление: , поскольку я обычно полагаю, что мой код совершенен (кто смеется?) Я начал новый проект XNA с нуля, чтобы увидеть, демонстрирует ли он такое же поведение. Итак, запустив новый проект Windows Game XNA 3.1 и запустив PIX, я получаю на этой шкале . Те же периодические паузы. Таким образом, проблема должна быть ниже в стеке, в XNA или Direct3D.
Итак, PIX показывает, что графический процессор работает над чем-то, я вижу список вызовов DX, выполненных в каждом кадре, а расчеты синхронизации показывают, что пауза возникает во время (или после) вызова IDirect3DDevice9::Present
.
Обновление 2: Я ранее установил и удалил XNA 4.0 CTP на проблемном компьютере. Я не могу быть уверен, что это связано, но я подумал, что переустановка битов XNA Game Studio 3.1 может изменить ситуацию. Оказывается, это так.
Основной вопрос остается тем же (и щедрость все еще работает): что может повлиять на XNA 3.1 (или DirectX), чтобы заставить его вести себя так, и есть ли какой-либо инструмент для ведения журнала / трассировки для уровня DirectX и / или GPU что может пролить свет на то, что происходит?
Примечание: Я использую XNA 3.1 на двухъядерной машине Windows 7 x64 с 8 ГБ ОЗУ.
Примечание 2: также разместил этот вопрос на форумах XNA Creators здесь .