我有一个带有静态构造函数的静态类,需要花费一些时间(10-15秒)来执行并完全初始化类.为了提高性能,我决定启用这个静态类,而不是在第一次需要它时,以便在实际需要使用时准备好.
我的第一个想法是为类创建一个Initialize()方法,但由于我已经有了一个静态构造函数,这个方法似乎不需要做任何事情,除了是调用显式初始化类而不访问其他任何一个的方法公共方法或财产.拥有一种不直接做任何事情的方法对我来说似乎并不合适.
然后我想我可以将代码从静态构造函数移动到这个Initialize()方法中,但是我还希望在首次需要时对类进行初始化,并且Initialize()不显式调用该方法.
总而言之,我希望遵守以下标准:
Initialize()方法).对于用C#编写的静态类,遵循上述标准的正确方法是什么?这也适用于其他编程语言(例如Java),但我个人对使用C#编写的解决方案感兴趣.
vcs*_*nes 19
我会使用初始化方法(编辑:请参阅Jon的答案).但是如果你真的只想使用构造函数,你可以这样做:
var type = typeof (YourType);
System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(type.TypeHandle);
Run Code Online (Sandbox Code Playgroud)
RunClassConstructor允许您强制类构造函数(静态构造函数)运行(如果它已经没有).如果它已经运行,比如因为你使用了类的静态成员,那么这没有效果.再运行一次没有效果.
Jon*_*eet 15
我可能只是去寻找Initialize方法 - 它可以做一些有用的事情:
Initialize调用初始化了类,则可能会抛出异常TypeInitializationException通常获得.