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

0 c# performance draw monogame

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

  • Windows 7的
  • Visual Studio 2012专业版
  • 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);
    }
Run Code Online (Sandbox Code Playgroud)

循环使角度(度)增加,使得我正在绘制的图像(png)不断旋转

绘图部分:

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);
    }
Run Code Online (Sandbox Code Playgroud)

编辑:我已经运行了一个分析器,这就是它所说的: 在此输入图像描述

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

Iai*_*way 6

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

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

"动画看起来很好,很漂亮,很流畅"

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

不要浪费时间修理没有破损的东西

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

这意味着你的程序基本上会对你的计算机说"尽可能快地运行这个循环!"

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

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

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

IsFixedTimeStep = true;
Run Code Online (Sandbox Code Playgroud)

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