0

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

但是,如果从未使用过 type,它的静态构造函数将在我调用 getField 时执行(查看它是否为空),并可能创建更多 COM 对象。有什么方法可以检测当前 AppDomain 中是否使用过类型?

4

1 回答 1

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));
    }
}
于 2013-03-03T11:12:33.237 回答