C # Windows формы и XNA - высокая загрузка процессора - PullRequest
0 голосов
/ 12 сентября 2011

У меня проблема с формами xna и windows.Я разработал элемент управления с xna, и я использовал этот элемент управления в форме окна.Моя проблема начинается, когда я открываю новую форму, и она полностью покрывает элемент управления с помощью xna.Когда это происходит, загрузка процессора увеличивается до 50% и более и сохраняется.Но если небольшая часть элемента управления xna видна, использование процессора снижается до нормального (на 1-10% больше или меньше, но не больше).

Вот конфигурация параметров xna

parameters = new PresentationParameters();

            parameters.BackBufferWidth = Math.Max(width, 1);
            parameters.BackBufferHeight = Math.Max(height, 1);
            parameters.BackBufferFormat = SurfaceFormat.Color;
            parameters.DepthStencilFormat = DepthFormat.Depth24;
            parameters.DeviceWindowHandle = windowHandle;
            parameters.PresentationInterval = PresentInterval.Default;
            parameters.IsFullScreen = false;

            graphicsDevice = new GraphicsDevice(GraphicsAdapter.DefaultAdapter,
                                                GraphicsProfile.Reach,
                                                parameters);

Заранее спасибо.

pd: это происходит только с Windows XP.С windows 7 у меня нет проблем.

Ответы [ 2 ]

1 голос
/ 28 сентября 2012

нужно поставить

Thread.Sleep(1);

в вашей функции Draw (), если вы не используете команду сна, XNA автоматически попытается запустить Draw с максимальной скоростью, что означает, что он уничтожит одно из ваших ядер. Это эффективно служит этапом ограничения кадра. Теперь ваш компьютер не может отображать со скоростью более 1000 кадров в секунду. Использование Thread.Sleep (10) ограничивает ваш компьютер до 100 кадров в секунду, но если вашему коду для нормальной работы требуется 2 мс, использование Sleep (10) сократит его до 80 кадров.

0 голосов
/ 13 сентября 2011

Хорошо.Я решил проблему.Не знаю почему .. но это работает.

в вашем коде рисования xna в конце я просто пишу:

Thread.sleep(10);
...