Я все еще работаю над своей видеоигрой и своим собственным движком игры, и я делаю хороший прогресс. В этот уик-энд я хотел потратить некоторое время, чтобы улучшить производительность своей игры и проверить наличие утечек памяти и так далее. В то время как большинство вещей выглядят хорошо, у меня невероятная высокая загрузка процессора около 45% (на Intel i5 с четырьмя ядрами). Во-первых, я думал, что у меня был очень плохой дизайн в одном из моих модулей, но даже после удаления всех частей из процесса рендеринга у меня все еще была загрузка процессора около 40%!Чрезвычайно высокая загрузка процессора в цикле визуализации
Это был мой циклом рендеринга после удаления всех моих модулей делают звонки:
public void Run()
{
_logger.BeginFunction(this.ToString(), "Run");
RenderLoop.Run(Form,() =>
{
_deviceContext.ClearDepthStencilView(_depthView, SharpDX.Direct3D11.DepthStencilClearFlags.Depth, 1.0f, 0);
_deviceContext.ClearRenderTargetView(_renderTargetView, Color.Black);
_swapChain.Present(0, SharpDX.DXGI.PresentFlags.None);
});
OnApplicationClosing();
_logger.EndFunction();
}
Так что, как вы можете увидеть почти ничего не происходит, и я до сих пор есть, что 40% нагрузка на процессор. Я проверил, если что-то работает в фоновом режиме, распечатывая текущую трассировку стека каждые 5 секунд. В этом процессе ничего не было, после того как я отключил все модули своего игрового движка.
Тогда я вспомнил, что у меня была аналогичная проблема много лет назад во время учебы, когда поток вычислений был в бесконечном цикле. Поскольку цикл не замедлился, он был выполнен как можно быстрее, что вызвало высокую загрузку процессора. Вспомнив об этом, я добавил уродливую линию в конце моего рендеринга петли выше:
System.Threading.Thread.Sleep(10);
вуаля, моя загрузка процессора снижается до примерно 10%, даже с включенными всеми модулями моей игры двигатель.
Однако это не приемлемое окончательное решение для моего игрового движка. Я потратил некоторое время на поиски онлайн-приложений для примеров цикла SharpDX, но я не смог понять, как другие люди справляются с этой проблемой.
Есть ли способ избежать высокой загрузки процессора без замедления цикла рендеринга с помощью thread sleep?
Буду признателен за советы и помощь от вас! :-)
Если вы используете какую-либо технику для ограничения частоты кадров, у вас будет 100% -ный процессор и максимальный fps. См. http://gamedev.stackexchange.com/q/68126 или http://gamedev.stackexchange.com/q/51545. – GSerg