.Net:是否可以按类类型获取先前创建的对象实例?

.Net:是否可以按类类型获取先前创建的对象实例?,.net,garbage-collection,.net,Garbage Collection,在.net中是否可以获取应用程序中创建的所有具体类型的实例?我猜这样的信息存储在GC中,但它可以从代码中访问吗 不,它通常不可用。调试/评测API有可能让您实现这一点(显然只有尚未收集的实例),但不是在普通代码中实现的。查看Raymond Chen的博客,了解为什么这是一个坏主意(调试除外)。 要实现它,您需要遍历堆上的所有对象,因为CLR不太可能按类型跟踪对象,因此速度会非常慢。不确定您的场景是什么,但我看不出这些信息何时有用。还有,这些信息的范围是什么,thread?应用程序域?装配例如,

在.net中是否可以获取应用程序中创建的所有具体类型的实例?我猜这样的信息存储在GC中,但它可以从代码中访问吗

不,它通常不可用。调试/评测API有可能让您实现这一点(显然只有尚未收集的实例),但不是在普通代码中实现的。

查看Raymond Chen的博客,了解为什么这是一个坏主意(调试除外)。


要实现它,您需要遍历堆上的所有对象,因为CLR不太可能按类型跟踪对象,因此速度会非常慢。

不确定您的场景是什么,但我看不出这些信息何时有用。还有,这些信息的范围是什么,thread?应用程序域?装配例如,说给我一个应用程序域中所有int对象的列表没有任何意义,是吗

如果这是针对您创建的特定类型,那么您可以通过使用某种工厂类来约束该类型对象的创建。在那里,您可以跟踪为给定类型实例化的所有对象


希望这能有所帮助。

我能想到这可能带来的一些安全问题。当然,它只在标记为安全关键的受信任代码中可用。范围将是应用程序域,其他任何内容都毫无意义。这对于GC相关的调试是有意义的。我希望有一些调试/分析api可以实现类似的功能。