c #windows窗体和xna - 高CPU使用率

时间:2011-09-12 14:47:39

标签: c# winforms xna-4.0

我遇到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我没有问题。

2 个答案:

答案 0 :(得分:1)

你需要把

Thread.Sleep(1);
在你的Draw()函数中,如果不使用sleep命令,XNA将自动尝试以最大速率运行Draw,这意味着它会蚕食你的一个核心。这有效地用作帧限制步骤。现在,您的计算机无法以超过1000fps的速度渲染。 使用Thread.Sleep(10)将您的计算机限制为100fps,但如果您的代码需要2ms才能正常运行,则使用Sleep(10)会将其降低到80帧。

答案 1 :(得分:0)

好。我解决了这个问题。 不知道为什么......但它有效。

在xna的自定义绘图代码中,我只写:

Thread.sleep(10);