返回顶部
首页 > 资讯 > 精选 >CLR Via C#静态构造函数的性能是怎样的
  • 153
分享到

CLR Via C#静态构造函数的性能是怎样的

2023-06-17 22:06:55 153人浏览 泡泡鱼
摘要

本篇内容主要讲解“CLR Via C#静态构造函数的性能是怎样的”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“CLR Via C#静态构造函数的性能是怎样的”吧!1 CLR Via C#静态构造

本篇内容主要讲解“CLR Via C#静态构造函数的性能是怎样的”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“CLR Via C#静态构造函数的性能是怎样的”吧!

1 CLR Via C#静态构造函数是私有的(private) ,而且不能人为去修改访问修饰符。

2 CLR Via C#静态构造函数不应该去调用基类的静态构造函数,因为静态字段不会被继承到子类。

3 CLR Via C#静态构造函数在一个类型中有且仅有一个,并且是无参的。

4 CLR Via C#静态构造函数中只能初始化静态字段。

从上面的***点可以知道静态构造函数都是private的,所以不能显示区进行调用,关于JIT何时会去生成调用静态构造函数的代码。存在着两种说法。通常被称为Precise和BeforeFieldInit。

l Precise方式JIT编译器生成调用的时机:***创建类型的代码之前;访问类的非继承字段或成员代码之前。

l BeforeFieldInit方式JIT编译器生成调用的时机:在访问费继承静态字段代码之前。

这两种方式的主要区别就是选择调用静态构造函数的时机是否是确定的,Precise方式CLR会在确定的时刻调用静态构造函数,而BeforeFieldInit方式CLR可以自由选择调用静态构造函数的时机,利用这一点,CLR可以根据类型是否在程序域中加载来选择静态构造函数的调用次数,以便能生成执行更快的代码。

下面来看个类分别用CLR Via C#展现了这两种方式

public class UserPrecise  {   public static string _name = "内联赋值:oec2003";  static UserPrecise()   {   _name = "构造函数赋值:oec2003";   }  }  public class UserBeforeFieldInit  {   public static string _name = "内联赋值:oec2003";  }

通过IL代码可以看出在UserBeforeFieldInit 的元数据上有BeforeFieldInit的标记,如下图:

CLR Via C#静态构造函数的性能是怎样的
CLR Via C# 静态构造函数性能的分析与测试

既然上面提到BeforeFieldInit方式CLR Via C#可以选择调用构造函数的次数从而来生成执行更快的代码,下面就写一段测试代码来看看究竟怎样。

public sealed class Program  {   static void Main(string[] args)  {   const Int32 iterations = 1000 * 1000 * 1000;   Test1(iterations);   Test2(iterations);   }  private static void Test1(Int32 iterations)  {   Stopwatch sw = Stopwatch.StartNew();   for (Int32 i = 0; i < iterations; i++)   {  UserBeforeFieldInit._name = "oec2003";  }   Console.WriteLine("Test1-UserBeforeFieldInit 用时:" + sw.Elapsed);   sw = Stopwatch.StartNew();   for (Int32 j = 0; j < iterations; j++)  {  UserPrecise._name = "oec2003";  }   Console.WriteLine("Test1-UserPrecise 用时:" + sw.Elapsed);   }   private static void Test2(Int32 iterations)  {  Stopwatch sw = Stopwatch.StartNew();  for (Int32 i = 0; i < iterations; i++)  {   UserBeforeFieldInit._name = "oec2003";  }  Console.WriteLine("Test2-UserBeforeFieldInit 用时:" + sw.Elapsed);   sw = Stopwatch.StartNew();   for (Int32 j = 0; j < iterations; j++)   {  UserPrecise._name = "oec2003";   }  Console.WriteLine("Test2-UserPrecise 用时:" + sw.Elapsed);   }  }   public class UserBeforeFieldInit  {  public static string _name;   }   public class UserPrecise   {   public static string _name ;   static UserPrecise()   {  _name = "oec2003";  }   }

CLR Via C#测试结果如下:

CLR Via C#静态构造函数的性能是怎样的
CLR Via C# 静态构造函数性能的分析与测试

从上面结果来看,BeforeFieldInit方式的执行速度还是要快很多,但为什么第二次执行时,两种方式的速度差不多呢?因为经过***次执行后JIT编译器知道类型的构造器已经被调用了,所以第二次执行时不会显示对构造函数进行调用。

到此,相信大家对“CLR Via C#静态构造函数的性能是怎样的”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: CLR Via C#静态构造函数的性能是怎样的

本文链接: https://lsjlt.com/news/293433.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • CLR Via C#静态构造函数的性能是怎样的
    本篇内容主要讲解“CLR Via C#静态构造函数的性能是怎样的”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“CLR Via C#静态构造函数的性能是怎样的”吧!1 CLR Via C#静态构造...
    99+
    2023-06-17
  • CLR Via C#调用静态构造函数是什么
    本篇内容主要讲解“CLR Via C#调用静态构造函数是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“CLR Via C#调用静态构造函数是什么”吧!CLR Via C#总结:1 静态构造函...
    99+
    2023-06-17
  • C++中怎么静态构造函数
    C++中怎么静态构造函数,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。函数是C++ 语言程序的主要组成部分,一个函数可以调用其他函数。在设计良好的程序中,每个函数都有特定的...
    99+
    2023-06-17
  • C#构造函数的结构层次关系是怎样的
    这篇文章主要介绍“C#构造函数的结构层次关系是怎样的”,在日常操作中,相信很多人在C#构造函数的结构层次关系是怎样的问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C#构造函数的结构层次关系是怎样的”的疑惑有所...
    99+
    2023-06-17
  • C++构造函数的特性是什么
    这篇文章主要介绍“C++构造函数的特性是什么”,在日常操作中,相信很多人在C++构造函数的特性是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++构造函数的特性是什么”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-07-02
  • C++静态成员函数和this指针是怎样的
    本篇文章给大家分享的是有关C++静态成员函数和this指针是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。静态成员静态成员就是在成员变量和成员函数前加上关键字static...
    99+
    2023-06-22
  • C++ 静态函数的性能考虑有哪些?
    静态函数性能考虑如下:代码大小:静态函数通常更小,因为不包含成员变量。内存占用:不属于任何特定对象,不占用对象内存。调用开销:更低,无需通过对象指针或引用调用。多线程安全:通常线程安全,...
    99+
    2024-04-16
    性能 c++ 静态函数 内存占用
  • java静态代码块、构造代码块、构造方法的执行顺序是怎样的
    这篇“java静态代码块、构造代码块、构造方法的执行顺序是怎样的”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“java静态代...
    99+
    2023-06-28
  • C++浅析构造函数的特性
    目录构造函数的概念构造函数的特性只能有一个构造函数构造函数的概念 构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有一个合适的初始值...
    99+
    2024-04-02
  • C++的构造函数和析构函数是什么
    本篇内容主要讲解“C++的构造函数和析构函数是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++的构造函数和析构函数是什么”吧!目录一、构造函数二、C++类的内存模型1、只定义成员函数2、...
    99+
    2023-06-20
  • C++中的拷贝构造是怎样的
    这期内容当中小编将会给大家带来有关C++中的拷贝构造是怎样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。拷贝构造函数同一个类的对象在内存中有完全相同的结构,如果作为一个整体进行复制或称拷贝是完美可行的,...
    99+
    2023-06-26
  • c++中类的构造函数可以初始化静态成员变量吗
    c++ 中类的构造函数可以初始化静态成员变量。初始化语法如下:在构造函数中使用 staticmembervariable = ...; 声明。静态成员变量仅在第一次执行构造函数时初始化一...
    99+
    2024-05-09
    c++
  • C++ 静态函数的定义是什么?
    静态函数是类中不属于任何对象的独立函数,用于封装类级操作和全局访问。它们的特点包括:1. 不依赖于对象;2. 全局可见性;3. 不可继承和重写。静态函数可用于优化性能和简化对类级功能的访...
    99+
    2024-04-16
    c++ 静态函数
  • C++ 函数可以声明为静态函数吗?静态函数的特点是什么?
    静态函数在 c++++ 中被声明为 static,具有以下特点:仅在声明函数的文件内可见,不属于任何类,在程序启动时分配内存,不可访问非静态成员。例如,用静态函数计算圆形面积的代码片段可...
    99+
    2024-04-21
    函数 c++ 静态函数 作用域
  • C++的拷贝构造函数是什么
    这篇文章主要介绍了C++的拷贝构造函数是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。拷贝构造函数用以将一个类的对象拷贝给同一个类的另一个对象,比如之前学习过的strin...
    99+
    2023-06-29
  • C#中的构造函数怎么用
    这篇文章主要介绍了C#中的构造函数怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C#中的构造函数怎么用文章都会有所收获,下面我们一起来看看吧。C# 中的构造函数类的 构造函数 是类的一...
    99+
    2023-06-17
  • C++ 静态函数的作用域是什么?
    静态函数的作用域不同于非静态成员函数,它可以在没有对象的情况下调用并访问成员变量和非成员变量:1. 只能访问以 static 声明的成员变量;2. 可以访问全局变量或其他命名空间中的变量...
    99+
    2024-04-16
    c++ 静态函数 作用域
  • C#中构造函数和析构函数的作用是什么
    本篇文章给大家分享的是有关C#中构造函数和析构函数的作用是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。C#构造函数(constructor)包括实例C#构造函数和静态C#...
    99+
    2023-06-17
  • C#中构造函数和析构函数的区别是什么
    这篇文章将为大家详细讲解有关C#中构造函数和析构函数的区别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。C#构造函数和析构函数在你可以访问一个类的方法、属性或任何其它东西之前, ***...
    99+
    2023-06-18
  • C++分析类的对象作类成员调用构造与析构函数及静态成员
    目录类对象作为成员静态成员定义和分类静态成员变量静态成员函数总结类对象作为成员 C++类中的成员可以是另一个类的对象,我们称该成员为 对象成员 例如: class Phone {} ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作