0 c# performance draw monogame
我正在运行的程序和版本:
问题:当我在下面的循环中更新我的游戏时,我打开任务管理器,看到该程序占用了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运行这样的程序
设计性能的一个普遍因素是,您需要以"足够快"为目标的以业务为中心的定义.如果您的游戏使用25%的CPU,您的用户是否在意?不会.您的用户关心您的游戏是否顺利运行.你的游戏运行顺畅吗?
"动画看起来很好,很漂亮,很流畅"
看起来你的程序运行得足够快!
这意味着你的程序基本上会对你的计算机说"尽可能快地运行这个循环!"
鉴于此,您如何得出结论:您的计算机"应该能够以1%的CPU利用率运行这样的程序"?
似乎不言自明的是,速率无限的循环将导致100%的CPU利用率而不考虑时钟速度(在像您这样的4核机器上= 25%)!
如果出于某种原因,对你来说非常重要的是游戏不能尽快运行,你可以尝试设置: -
IsFixedTimeStep = true;
Run Code Online (Sandbox Code Playgroud)
在你的游戏构造函数中,但要确保你清楚地理解固定与可变时间步骤的含义: -