我的应用程序没有使用太多内存 (C#)

My application isn't using much memory (C#)

我目前正在使用我创建的游戏引擎设计一个 2D 游戏,并决定检查每一秒我使用了多少内存。

我目前有一个游戏画面,总共包含 4097 个游戏对象,每个对象至少包含一个精灵(位图),每帧渲染到屏幕上。每个精灵都是一个 32x32 像素的图像。

我显然使用的结果 MB 大约是 1.10MB,这太多了,还是我做得还好?我还应该考虑哪些其他事项?

另外,为了展示,我是这样检查我正在使用的内存量的:

double mb = MathHelper.ConvertBytesToMegabytes(GC.GetTotalMemory(true));
Console.WriteLine("Memory: " + mb);

和"ConvertBytesToMegabytes"方法:

public static double ConvertBytesToMegabytes(long bytes)
{
    return (bytes / 1024f) / 1024f;
}

除非引擎出于相机原因未渲染所有 4097 个游戏对象,否则您应该使用 12-17MB,假设正常的 32x32 位图大小约为 3KB

GC.GetTotalMemory:

A number that is the best available approximation of the number of bytes currently allocated in managed memory.

如果您使用的是 GDI+,我假设您使用的是 Image class。但是,它的数据不在托管内存中,因此无法通过调用垃圾收集器获取。您的托管数据需要 1.1 MB,这对于现代机器来说完全没问题。

位图的内存开销可以很容易地计算出来。假设所有精灵都存在于内存中,大小为 32x32 像素,并使用 32 位像素,这为我们提供了 16781312 字节的像素数据,或 16 MB。您应该更多地依赖此计算而不是来自 Process class.

的内存报告

我想您最初担心的是报告的内存量太低,无法存储所有位图数据。如您所见,您只是使用了错误的方法来获取它。其他(或多或少不可靠且令人困惑)的获取内存量的方法,请参考this question.