【发布时间】:2011-08-11 12:36:25
【问题描述】:
[编辑]
在静态类 myWork 中,
public static class myWork()
{
public static SomeWPFCollectionType myGenerate()
{
SomeWPFCollectionType myGenerated=new SomeWPFType();
List<SomeType> myLists=new List<SomeWPFType>();
for(int i=0 ; i < someCount ; i++)
{
myLists.Add(new SomeType(...););
}
myGenerated = SomeTypeToSomeWPFCollection(myGenerated);
return myGenerated;
}
}
....
public partial class MainWindow : Window
{
...
private void btn1_Click(...)
{
this.someControl.someCollection = myWork.myGenerate();
}
}
- 什么时候清除 myLists 的内存?
- 什么时候清除 myGenerated 的内存?
当我第一次调用 btn1_click 时,我预计会这样做。 但 Windows 的任务管理器报告似乎存在内存泄漏,很明显。
-编辑-
我认为我的代码没有在 myLists 上发生泄漏。因为,
....
myGenerated.Unloaded += delegate(...)
{
//i breaked here and see a value of myList in the Watch window of VS.
Debug.write(myList.ToString());
}
myGenerated = SomeTypeToSomeWPFCollection(myGenerated);
return myGenerated;
....
当 myGenerated 被卸载,但 myList 仍有 15 个项目。
【问题讨论】:
-
你不能处理
myLists- 它是一个List<T>,它没有实现IDisposable。此外,您提供的代码中存在各种错误。不能编译的代码不能泄露。如果您可以提供一些真实代码,我们可以提供更多关于是否存在泄漏的信息。 -
你的问题不清楚。每次按下按钮时,您都会创建一个新集合,这看起来不像通常会做的事情,因为 Jon Skeet 要求发布可以编译的代码,我们可以从那里开始。
-
物品会被GC几乎任意收集,你点击了多少次按钮?
someCount有多大,SomeWPFType是“大”,是一次性的吗? -
我已编辑。我认为我的真实代码不是重点。我正在学习 C#,所以我需要一般信息。对不起,谢谢。
-
人们必须开始解释他们为什么投反对票
标签: c# memory memory-leaks