Monogame性能更新逻辑非常糟糕,为什么?

时间:2014-05-20 11:42:06

标签: c# performance draw monogame

我正在运行的程序和版本:

  • Windows 7
  • Visual Studio 2012 Professional
  • Monogame 3.2
  • OpenGL项目

问题:当我在下面的循环中更新我的游戏时,我打开任务管理器,看到该程序占用了25个CPU!这太过分了。

循环:

protected override void Update(GameTime gameTime)
    {
        if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || Keyboard.GetState().IsKeyDown(Keys.Escape))
            Exit();
        // TODO: Add your update logic here
        if (angleCounter != 359)
            angleCounter++;
        else
            angleCounter = 0;

        base.Update(gameTime);
    }

循环使角度(度)增加,以便图像(png)i绘图不断旋转

绘图部分:

protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.CornflowerBlue);
        spriteBatch.Begin();
        // TODO: Add your drawing code here
        Vector2 location = new Vector2(200, 200);
        Rectangle sourceRectangle = new Rectangle(0, 0, sprite.Width, sprite.Height);
        Vector2 origin = new Vector2(sprite.Width / 2, sprite.Height / 2);

        float angle = (float)DegreeToRadianal(angleCounter);

        spriteBatch.Draw(sprite, location, sourceRectangle, Color.White, angle, origin, 1f, SpriteEffects.None, 1);
        spriteBatch.End();
        base.Draw(gameTime);
    }
编辑:我已经运行了一个分析器,这就是它所说的: enter image description here

另外:我的电脑本身不是问题,它是一台非常高端的PC应该可以用01 CPU运行这样的程序

2 个答案:

答案 0 :(得分:6)

1。您的绩效指标的基础是什么?

设计性能的一个普遍因素是,您需要一个以“足够快”为目标的以业务为中心的定义。如果您的游戏使用25%的CPU,您的用户是否在意?不会。您的用户关心您的游戏是否顺利运行。你的游戏运行顺畅吗?

  

“动画看起来很好,很好,很流畅”

看起来你的程序运行得足够快!

Don't waste time fixing things that aren't broken

2。看起来你的游戏循环速度无限制。

这意味着您的程序基本上会对您的计算机说“尽可能快地运行此循环!”

鉴于此,您如何得出结论:您的计算机“应该能够以1%的CPU利用率运行这样的程序”?

似乎不言自明的是,速率无限的循环将导致100%的CPU利用率而不考虑时钟速度(在像您这样的4核机器上= 25%)!

如果出于某种原因,对你来说非常重要的是游戏运行速度不是很快,你可以尝试设置: -

IsFixedTimeStep = true;

在您的游戏构造函数中,但请确保您清楚地了解固定时间步骤与可变时间步骤的含义: -

答案 1 :(得分:0)

好的,基于你们对谷歌的大力帮助和研究,我发现了以下内容:

  • Monogame希望程序尽可能快地运行,而不是“保存”计算机的CPU。因此它“预留”了1个核心(当你真正需要非常高的时候会有更多核心)。

  • 正常程序和游戏之间的区别是巨大的,正常程序意图最小化CPU,因此对计算机的影响,游戏意图通过使计算机更加努力地使游戏本身运行更顺畅

  • 最后:我应该明确我的意图,例如:我没有在这个特定的问题中说明我想在保持平稳游戏(60fps)的同时制作低影响力的CPU游戏< / p>

谢谢大家通过这么快的回答帮助我得出这些结论!