[英]Draw script eating up memory and cpu
我一直在使用此脚本来画线,并且可以工作,但是当我运行游戏时,它开始消耗我的资源,而这无人问津。
public static void DrawLine(Vector2 start, Vector2 end, Color color, int width, float alpha, float depth)
{
// GraphicsDevice stored in other class
var texture = new Texture2D(Graphics2D.GraphicsDevice, 1, 1);
texture.SetData(new[] { color });
Vector2 edge = end - start;
float angle = (float)Math.Atan2(edge.Y, edge.X);
// SpriteBatch stored in other class
Graphics2D.SpriteBatch.Draw(
texture,
new Rectangle(
(int)start.X,
(int)start.Y,
(int)edge.Length(),
width),
null,
Color.White,
angle,
new Vector2(0, 0),
SpriteEffects.None,
1.0f);
}
一旦绘制线条,内存和CPU使用率就会开始飙升。
关于它为什么这样做的任何猜测? 我什至应该过分担心吗? 还是这种操作很正常。
正如@Norris在评论中提到的,在Initialize中创建纹理,然后重新使用它。
它耗尽了CPU的原因是因为您要从头开始创建每个帧都全新的纹理。 这很沉重,因为您要让GPU保留内存和电源来创建新纹理,使用单个帧,然后再次对其进行布置,并在下一帧重复该过程。 对大尺寸图像进行一些更改时,Photoshop有进度条是有原因的。
即使它不是CPU密集型的,也不是必须的做法,如果不需要,则每帧都要重新创建某些内容。 始终尽可能重复使用。 这适用于所有类型的应用程序,但由于60fps绘制循环,因此在游戏开发中尤其重要。 唯一不适用于此对象的对象是基本值类型,例如Ints,Floats,Vector3's, Matricies等。当然,除非这些值基于需要在每一帧进行的计算。
总结一下:为了完成您的预期目标,总是做尽可能少的工作
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.