我有一个带有静态构造函数的静态类,它需要一些时间(10-15 秒)来执行并完全初始化该类。为了提高性能,我决定让这个静态类显式初始化,而不是在第一次需要它时进行初始化,以便在实际需要使用时准备就绪。
我的第一个想法是为该类创建一个 Initialize()
方法,但是由于我已经有了一个静态构造函数,所以这个方法似乎不需要做任何事情,除了是方法调用以显式初始化类而不访问其任何其他公共(public)方法或属性。拥有一个不直接执行任何操作的方法对我来说似乎不合适。
然后我想我可以将代码从静态构造函数移到这个 Initialize()
方法中,但我也希望类在第一次需要时被初始化并且 Initialize()
方法未明确调用。
总而言之,我希望遵守以下标准:
- 我想允许静态类被显式初始化(可能通过使用公共(public)
Initialize()
方法)。 - 我不想在不需要时访问该类的任何其他公共(public)方法或属性,即使这会初始化静态类。
- 如果类没有被显式初始化,我仍然想在第一次需要它时初始化它(即当访问其他公共(public)方法或属性以使用它们提供的功能或数据时)。
- 这是一个辅助类,对于我的目的而言,使用单例设计模式不是必需的。
对于用 C# 编写的静态类,遵守上述标准的正确方法是什么?这也适用于其他编程语言(例如 Java),但我个人对用 C# 编写的解决方案感兴趣。
最佳答案
我会使用初始化方法(编辑:参见 Jon 的回答)。但是如果您真的只想使用构造函数,您可以这样做:
var type = typeof (YourType);
System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(type.TypeHandle);
RunClassConstructor
允许您强制类构造函数(静态构造函数)运行(如果它尚未运行)。如果它已经运行,比如说因为你使用了该类的静态成员,那么这没有任何效果。额外运行它没有效果。
关于c# - 如何在实际需要之前初始化 C# 静态类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8748492/