我遇到xna和Windows窗体的问题。我用xna开发了一个控件,我在windows窗体中使用了该控件。当我打开一个新表单并且它完全覆盖使用xna的控件时,我的问题就开始了。当发生这种情况时,CPU使用率会达到50%或更高并保持不变。但是,如果xna控件的一小部分可见,则cpu使用率会下降到nornal(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我没有问题。
答案 0 :(得分:1)
你需要把
Thread.Sleep(1);
在你的Draw()函数中,如果不使用sleep命令,XNA将自动尝试以最大速率运行Draw,这意味着它会蚕食你的一个核心。这有效地用作帧限制步骤。现在,您的计算机无法以超过1000fps的速度渲染。
使用Thread.Sleep(10)将您的计算机限制为100fps,但如果您的代码需要2ms才能正常运行,则使用Sleep(10)会将其降低到80帧。
答案 1 :(得分:0)
好。我解决了这个问题。 不知道为什么......但它有效。
在xna的自定义绘图代码中,我只写:
Thread.sleep(10);