首页 > 其他分享 >大对象和finalzier对象创建相比小对象会更慢

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

时间:2022-09-24 17:11:42浏览次数:53  
标签:对象 Benchmark int finalzier intArray 6.0 ns 更慢 public

《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();
        }
    }

标签:对象,Benchmark,int,finalzier,intArray,6.0,ns,更慢,public
From: https://www.cnblogs.com/dewxin/p/16726014.html

相关文章

  • C++自学笔记 面向对象程序设计OOP(Object Oriented Programming)
    什么是对象?Objects=Attributes+ServicesData:ThepropertiesorstatusOperations:thefuctionsC语言中定义的变量用来存储数据,所以它可以理解为是“对象”“......
  • JavaScript Window - 浏览器对象模型(BOM)
     浏览器对象模型(BOM):现代浏览器已经实现了JavaScript交互性的相同方法和属性,所以常被认为是BOM的方法和属性Window对象:所有浏览器都支持window对象,表示浏览器的窗......
  • JavaScript Boolean(布尔) 对象
    Boolean对象:用于转换一个不是Boolean类型的值转换为Boolean类型值(true或者false).Boolean对象属性:constructor:返回对创建此对象的Boolean函数的引用prototype......
  • JavaScript Array(数组) 对象
    数组:数组对象是使用单独的变量名来存储一系列的值数组可以用一个变量名存储所有的值,并可以用变量名访问任何一个值数组中每一个元素都有自己的id,方便访问创建数组:三种......
  • JavaScript 字符串(String) 对象
    字符串可以使用单引号或者双引号使用位置索引可以访问字符串中的任何字符,字符第一个字符为【0】,依次等可在字符串中使用引号varanswer="Heiscalled'Johnny'";也可......
  • JavaScript Number 对象
    JavaScript数字:可以使用也可以不使用小数点来书写极大或极小的数字可通过科学(指数)计数法来写 JavaScript数字均为64位:所有的数字都是由浮点型类型  精度:......
  • JavaScript prototype(原型对象)
     对象都会从一个prototype(原型对象)中继承属性和方法。添加属性和方法:想要在对象的构造函数中添加属性或方法使用prototype属性就可以给对象的构造函数添加新的属性......
  • JavaScript 对象
    所有事物都是对象:布尔型可以是一个对象。数字型可以是一个对象。字符串也可以是一个对象日期是一个对象数学和正则表达式也是对象数组是一个对象甚至函数也可以是......
  • 对象及数据存储
    一、对象的创建语法:varobj_1={属性名1:内容,属性名2:内容}​调用对象中的属性对象名['属性名']​创建对象方法​varobj_2={num:1run:function(){......
  • Spring创建对象的方式
    ​ /**作者:呆萌老师*☑csdn认证讲师*☑51cto高级讲师*☑腾讯课堂认证讲师*☑网易云课堂认证讲师*☑华为开发者学堂认证讲师*☑爱奇艺千人名师计划成员*在这里......