一、在64位应用下对C#的对象和结构内存分配做了性能测试,测试结果如下
二、结论
1、GC.GetTotalMemory获得的并非物理内存,而是Runtime自己统计的内存。
2、新建数组时,没有立即分配物理内存,而是分配了虚拟内存。
3、64位下对象默认占用16字节(对象指针和同步块索引),结构体没有类似的内容,如果不得不减少内存占用,可以考虑用结构体。
4、大量小对象的分配比较耗时,每1M*32耗费74ms。
5、总大小1.6G的结构体数组分配耗时很小,大概200ms。
三、源码
public class ClassMemory
{
public int a;
public float b;
public double c;
}
public struct StructMemory
{
public int a;
public float b;
public double c;
}
public class MemoryTest
{
public void DoTest()
{
Stopwatch s = new Stopwatch();
s.Start();
int minMemoryLen = 100000000;
long t1 = s.ElapsedMilliseconds;
long m1 = GC.GetTotalMemory(false);
ClassMemory[] minClassArr = new ClassMemo