Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#中,静态构造函数是为对象的每次初始化运行,还是只运行一次?_C#_Asp.net_Static_Initialization_Static Constructor - Fatal编程技术网

在C#中,静态构造函数是为对象的每次初始化运行,还是只运行一次?

在C#中,静态构造函数是为对象的每次初始化运行,还是只运行一次?,c#,asp.net,static,initialization,static-constructor,C#,Asp.net,Static,Initialization,Static Constructor,在我的类中,我有一个字符串的静态字典对象,它包含大量的项(它从文件中读取并初始化它们),我编写了一个静态构造函数来这样做,需要几秒钟,但我想做一次以加快速度,因为我是在ASP.Net中做的,我希望我的网站没有这种开销,我该怎么做?如果这个构造器为每个对象运行,那么我想换个方法,但我想我必须在用户运行的网站的每个页面上运行这个方法,所以我再次认为它是相同的,对吗? 对于只初始化一次大型变量集,您的解决方案是什么?谢谢对于该类型,它会根据AppDomain运行一次。不是每个实例一次。根据C#4规范第

在我的类中,我有一个字符串的静态字典对象,它包含大量的项(它从文件中读取并初始化它们),我编写了一个静态构造函数来这样做,需要几秒钟,但我想做一次以加快速度,因为我是在ASP.Net中做的,我希望我的网站没有这种开销,我该怎么做?如果这个构造器为每个对象运行,那么我想换个方法,但我想我必须在用户运行的网站的每个页面上运行这个方法,所以我再次认为它是相同的,对吗?
对于只初始化一次大型变量集,您的解决方案是什么?谢谢

对于该类型,它会根据
AppDomain
运行一次。不是每个实例一次。根据C#4规范第10.12节:

封闭类类型的静态构造函数在给定的应用程序域中最多执行一次。静态构造函数的执行由应用程序域中发生的以下第一个事件触发:

  • 将创建类类型的实例
  • 引用类类型的任何静态成员

注意关于它的部分是每个封闭类。因此,如果您有一个泛型类型
Foo
,那么
Foo
Foo
(etc)的一个单独类型,将有单独的静态字段,并将单独调用其静态构造函数。

它仅在应用程序的生命周期内运行一次

从MSDN-:

静态构造函数用于初始化任何静态数据,或执行只需执行一次的特定操作。在创建第一个实例或引用任何静态成员之前,会自动调用它