我正在测试Intel Inspector下的复杂.net / COM应用程序(本机内存泄漏)。在.net代码的很多地方,我们在静态字段中缓存对COM对象的引用。显然,Inspector将这些标记为泄漏。在少数情况下,添加抑制就足够了,但是有时标记的对象(作为主COM对象的一部分创建)的数量是失控的(数百个)并且抑制这些对象可能隐藏类似于实际泄漏的模式。 长话短说 - 就在进程退出之前,我正在遍历appdomain中加载的所有程序集中的所有类,并且我将设置为引用我的COM对象的静态字段。如果我可以打印引用COM对象的所有静态字段,即使它们尚未被接受为有效缓存(并且可能是实际泄漏),这对于将来的使用将是很好的。
但是如果从未使用过类型,那么当我调用getField(看它是否为null)时,它的静态构造函数会执行,并且可能会创建更多的COM对象。 有没有办法检测当前AppDomain中是否曾使用过类型?
答案 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));
}
}