繁体   English   中英

将会列出 <Func<double, double> &gt;导致内存泄漏?

[英]Will List<Func<double, double>> cause memory leak?

我有一个函数,它包含一个函子列表:

public void RunFunc(List<Func<double, double>> functorList)

事实是, Func<double, double>分配有来自不同对象的方法。 现在,我担心的是,垃圾回收器将始终保留指向这些方法的指针,并始终保留这些对象的内存,因为GC不知道如何处置它们。

我对吗? RunFunc会导致内存泄漏吗? 如果是,我应该怎么做以释放由List<Func<double, double>> functorList

不,这不会导致内存泄漏。

一旦List<>不可访问,它将被收集。 Func<>项目是outgoinf引用。 只有传入的引用才能使某些内容保持活动状态。

您正在创建一个委托列表,尽管存在该列表,它将保存对每个委托引用的每个对象的引用。

如果RunFunc方法将此列表存储为成员,则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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM