当我们分析内存堆时,通常会遇到以下4种类型的GC句柄:
弱引用:弱引用GC句柄不会阻止其对应的实例被垃圾回收。
例如,System.WeakReference类的实例使用此类句柄
。正常引用:正常引用GC句柄会阻止相应的实例被垃圾回收。
例如,强引用的实例使用此类句柄
。引用计数:引用计数GC句柄在运行时内部使用,
例如处理COM接口时
。固定引用:为什么需要这种GC句柄?是仅为了避免该实例在内存中移动还是
背后还有其他概念?我想知道固定引用GC句柄背后的概念(并附带示例)。
编辑为Itay的答案:我有一个非空数组-DiffCell [][ ]绑定到WPF中的数据网格。当我关闭显示此数据网格的窗口时,在堆上通过object [] 看到指向此空的DiffCell数组的固定引用GC句柄(请参见快照)。我没有使用任何不安全的代码。在关闭该窗口之前,我只是将数据网格的ItemsSource设置为null。那么我的问题是,谁会在堆上固定此数组以及为什么?