您正在創建代表列表,並且在該列表存在的情況下,它將保存對每個代表引用的每個對象的引用。
如果RunFunc
方法將此列表存儲爲成員,則只要該列表存儲,對象就不會被垃圾收集。這是一件好事 - 否則它可能稍後嘗試對已銷燬的對象調用函數。
一旦列表停止被引用,它將不再阻止對象被垃圾收集。
因此,在回答你的問題時,RunFunc
實際上與任何其他CLR方法沒有任何區別,並且同樣的垃圾回收規則將一如既往地適用。
這裏有一個簡單的例子:
Action myAction = null;
{
var widget = new Widget();
myAction =() => { widget.ScooblyWob() };
}
// the widget object has gone out of scope, but will stay in memory
// It is not a candidate for garbage collection, because
// it is being referenced by the myAction function.
myAction();
// Even though I have no explicit references to the widget,
// I just called a function on it!
myAction = null;
// Now the action has been dereferenced,
// so the widget is a garbage collection candidate
是'RunFunc'做什麼的不僅僅是執行各功能以外名單?除非它存儲對列表或任何函數的引用,否則'RunFunc'本身不會導致任何內存泄漏。 – Rawling
@Rawling,它只是執行功能 – Graviton