绘制脚本占用内存 cpu

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 在评论中提到的那样,在初始化时创建纹理,然后重新使用它。

它吃掉你的 CPU 的原因是你在每一帧都从头开始创建一个全新的纹理。这很繁重,因为您要求 GPU 保留内存和功率来创建新纹理,在单帧使用它,再次处理它,然后在下一帧重复该过程。 Photoshop 在对大图像进行一些更改时出现进度条是有原因的。

即使它不是 cpu 密集型的,如果不需要的话,每一帧都重新创建一些东西也是不好的做法。始终尽可能多地重复使用。这适用于所有类型的应用程序,但由于 60fps 绘制循环,这在游戏开发中尤为重要。这唯一不适用于的对象是基本值类型,例如 Ints、Floats、Vector3、Matricies 等。当然,除非这些值基于需要在每一帧发生的计算。

总结一下: 总是做尽可能少的工作来完成你的预期目标