【问题标题】:in C# does Static constructor run for each initialization of object, or only once?在 C# 中,静态构造函数是为对象的每个初始化运行还是只运行一次?
【发布时间】:2011-10-26 21:43:20
【问题描述】:

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

【问题讨论】:

    标签: c# asp.net static initialization static-constructor


    【解决方案1】:

    它为该类型运行一次,每个 AppDomain。不是每个实例一次。来自 C# 4 规范,第 10.12 节:

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

    • 创建了一个类类型的实例。
    • 类类型的任何静态成员都被引用。

    注意关于它是每个关闭类的部分。所以如果你有一个泛型类型Foo<T>,那么Foo<string> 是一个独立于Foo<object> 的类型(等等),会有独立的静态字段,并且会分别调用它的静态构造函数。

    【讨论】:

      【解决方案2】:

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

      来自 MSDN - Static Constructors:

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

      【讨论】:

        猜你喜欢
        • 2011-02-09
        • 2015-07-08
        • 1970-01-01
        • 1970-01-01
        • 2011-02-15
        • 2020-02-15
        • 2014-08-03
        • 2020-09-08
        • 2010-11-14
        相关资源
        最近更新 更多