Tre*_*ent 1 .net c# delegates garbage-collection memory-management
最近发现ToGadget中的变量,也可能是委托,也没有收集垃圾.任何人都可以看到为什么.NET持有这个参考?似乎Foo结束后代表和所有代码都会被标记为垃圾收集.在倾倒堆之后,直接在内存中看到了B illions.
注意:'result.Things'是List <Gadget>(),Converter是系统委托.
public Blah Foo()
{
var result = new Blah();
result.Things = this.Things.ConvertAll((new Converter(ToGadget)));
return result;
}
.................
public static Gadget ToGadget(Widget w)
{
return new Gadget(w);
}
Run Code Online (Sandbox Code Playgroud)
更新:将"ConvertAll"更改为此可清除代理和相应的对象引用.这告诉我,List <> ConvertAll以某种方式持有代表,或者我不明白这些东西是如何被垃圾收集的.
foreach (var t in this.Things)
{
result.Things.Add(ToGadget(t));
}
Run Code Online (Sandbox Code Playgroud)
您可以整天询问StackOverflow并获得一些有根据的猜测,或者您可以在应用程序上打一个内存分析器,并立即看到根源和垃圾是什么.有专门为快速,轻松地解决您的确切问题而构建的工具.使用它们!
归档时间: |
|
查看次数: |
507 次 |
最近记录: |