大对象和finalzier对象创建相比小对象会更慢

《Pro .NET Memory Management》 Chapter6 P428 中讲道大对象(包括Obj对象头部等,总字节占85000及以上)和有finalizer的对象生成的构造函数(JIT_New)会更为复杂,因此开销会更大。对此做了验证。小对象使用辅助函数JIT_TrialAllocSFastMP_InlineGetThread生成构造函数。


BenchmarkDotNet=v0.13.2, OS=Windows 11 (10.0.22621.521)
Intel Core i5-9300H CPU 2.40GHz, 1 CPU, 8 logical and 4 physical cores
.NET SDK=6.0.200
  [Host]     : .NET 6.0.2 (6.0.222.6406), X64 RyuJIT AVX2
  DefaultJob : .NET 6.0.2 (6.0.222.6406), X64 RyuJIT AVX2

|           Method |         Mean |      Error |      StdDev |    Ratio | RatioSD |
|----------------- |-------------:|-----------:|------------:|---------:|--------:|
|         SmallObj |     2.384 ns |  0.0408 ns |   0.0361 ns |     1.00 |    0.00 |
|     SmallObj400B |    19.388 ns |  0.4611 ns |   0.5996 ns |     8.07 |    0.22 |
|    SmallObj4000B |   172.992 ns |  3.5460 ns |   4.0836 ns |    72.59 |    1.93 |
|   LargeObj88000B | 4,934.280 ns | 95.6147 ns | 102.3067 ns | 2,067.26 |   43.73 |
| SmallObjFinalize |   145.863 ns |  3.0032 ns |   6.7788 ns |    62.26 |    3.88 |
    public class SmallWithFinalizer
    {
        int val;

        ~SmallWithFinalizer()
        {
        }
    }

    public class Small
    {
        int val;
    }

    public class FinalizerObjCost
    {
        [Benchmark(Baseline = true)]

        public Small SmallObj()
        {
            return new Small();
        }

        [Benchmark]
        public int[] SmallObj400B()
        {
            var intArray = new int[100];
            return intArray;
        }

        [Benchmark]
        public int[] SmallObj4000B()
        {
            var intArray = new int[1000];
            return intArray;
        }


        [Benchmark]
        public int[] LargeObj88000B()
        {
            int[] intArray = new int[22000];
            return intArray;
        }

        [Benchmark]
        public SmallWithFinalizer SmallObjFinalize()
        {
            return new SmallWithFinalizer();
        }
    }
posted @   dewxin  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示