C#内存分配性能测试

本文对64位C#应用下的对象和结构内存分配进行了性能测试。测试结果显示,GC.GetTotalMemory获取的是Runtime内存统计,而非物理内存;新建数组分配的是虚拟内存;64位环境下对象默认占用16字节,结构体则不包含额外开销;大量小对象分配耗时较长;而总大小1.6G的结构体数组分配仅需约200ms。
摘要由CSDN通过智能技术生成

一、在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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值