我有一个带有静态构造函数的静态类,需要一些时间(10-15 秒)来执行并完全初始化该类。为了提高性能,我决定让这个静态类显式初始化,而不是在第一次需要它时初始化,以便在实际需要使用时它就可以使用了。
我的第一个想法是创建一个Initialize()
方法,但由于我已经有一个静态构造函数,因此该方法似乎不需要执行任何操作,只需调用显式初始化该类的方法,而无需访问其任何其他公共方法或属性。拥有一种不直接执行任何操作的方法对我来说似乎并不合适。
然后我想我可以将代码从静态构造函数移到这里Initialize()
方法,但我也希望在第一次需要该类时对其进行初始化,并且Initialize()
方法没有被显式调用。
总而言之,我希望遵守以下标准:
- 我想允许显式初始化静态类(可能通过使用公共
Initialize()
方法)。
- 当我不需要时,我不想访问类上的任何其他公共方法或属性,即使这会初始化静态类。
- 如果该类尚未显式初始化,我仍然希望在第一次需要它时对其进行初始化(即,当访问其他公共方法或属性以使用它们提供的功能或数据时)。
- 这是一个辅助类,对于我的目的而言,没有必要使用单例设计模式。
对于用 C# 编写的静态类,遵守上述标准的正确方法是什么?这也适用于其他编程语言(例如 Java),但我个人对用 C# 编写的解决方案感兴趣。
我会使用初始化方法(编辑:参见乔恩的答案)。但如果你really只是想使用构造函数,你可以这样做:
var type = typeof (YourType);
System.Runtime.CompilerServices.RuntimeHelpers.RunClassConstructor(type.TypeHandle);
RunClassConstructor http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.runtimehelpers.runclassconstructor.aspx允许您强制类构造函数(静态构造函数)运行(如果尚未运行)。如果它已经运行,比如说因为您使用了类的静态成员,那么这没有效果。额外运行几次没有效果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)