我目前正在使用我创建的游戏引擎设计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;
}
答案 0 :(得分:1)
一个数字,是当前在托管内存中分配的字节数的最佳可用近似值。
如果您使用的是GDI +,我假设您使用的是 Image 类。但是,它的数据不在托管内存中,因此无法通过调用垃圾收集器获取。您的托管数据成本为1.1 MB,对现代机器来说完全没问题。
您的位图的内存成本可以很容易地计算出来。假设存储器中存在所有精灵,大小为32x32像素,并且使用32位像素,这为像素数据提供了16781312字节,即16 MB。您应该依赖此计算而不是 Process 类的内存报告。
我认为您最初担心的是报告的内存量太低而无法存储所有位图数据。如您所见,您只是使用了错误的方法来获取它。对于获取内存量的其他(或多或少不可靠和令人困惑)方法,请参阅this question。
答案 1 :(得分:0)
除非因相机原因引擎未渲染所有4097游戏对象,否则你应该使用12-17MB,假设正常的32x32位图大小为~3KB