如何检测静态构造函数是否在.net中执行?

时间:2013-03-03 10:22:35

标签: c# .net static-constructor

我正在测试Intel Inspector下的复杂.net / COM应用程序(本机内存泄漏)。在.net代码的很多地方,我们在静态字段中缓存对COM对象的引用。显然,Inspector将这些标记为泄漏。在少数情况下,添加抑制就足够了,但是有时标记的对象(作为主COM对象的一部分创建)的数量是失控的(数百个)并且抑制这些对象可能隐藏类似于实际泄漏的模式。 长话短说 - 就在进程退出之前,我正在遍历appdomain中加载的所有程序集中的所有类,并且我将设置为引用我的COM对象的静态字段。如果我可以打印引用COM对象的所有静态字段,即使它们尚未被接受为有效缓存(并且可能是实际泄漏),这对于将来的使用将是很好的。

但是如果从未使用过类型,那么当我调用getField(看它是否为null)时,它的静态构造函数会执行,并且可能会创建更多的COM对象。 有没有办法检测当前AppDomain中是否曾使用过类型?

1 个答案:

答案 0 :(得分:0)

我认为你不能自动完成它,但你可以让静态构造函数自己注册。因此,不是遍历程序集中的所有类,而是迭代所有已注册的类。

public static class ClassRegistrar
{
    private static List<Type> registered = new List<Type>();
    public static void Register(Type type)
    {
        registered.Add(type);
    }
    public static IEnumerable<Type> Registered
    { get { return registered; } }
}

public class MyClass
{
    static MyClass()
    {
        ClassRegistrar.Register(typeof(MyClass));
    }
}