为什么枚举实例在使用后不会从内存中释放

时间:2016-04-04 14:16:10

标签: .net memory

我看到内存中有一个对象进入CustomControl命名空间:

“WpfApplication66.CustomControl.LayoutChanged []” 即使它被关闭了。因为?

enter image description here

1 个答案:

答案 0 :(得分:1)

  1. 类型名称LayoutChanged[]是指数组,而不是枚举。这很重要,因为数组通常会进行垃圾回收。
  2. 对于在.NET中成为符合条件的对象,必须在一组根(例如线程堆栈帧和全局变量)中无法访问它。从您提供的信息中可以看出,情况并非如此。
  3. 就用户代码而言,.NET GC不具有确定性。它会在运行时认为需要收集时收集(在某些情况下可能只是从不)。在您获取探查器快照时,GC可能没有尝试收集任何内容。
  4. .NET GC是世代的,这意味着它不会费心收集每个周期的所有对象 - 它可能会将自己限制在特定的几代对象上。当对象在收集周期中存活下来时,它们会被提升到较老的一代,而收集的频率会降低。