如何在C#中释放通用列表对象内存

时间:2011-09-28 13:03:15

标签: c# silverlight memory

在我的Silverlight应用程序中,我创建了一个带有自定义类的通用列表对象。我有大约3个(300,000)个记录。我必须经常将不同的数据绑定到同一个列表,但有时我会出现内存不足错误。

如何在C#.NET中释放自定义类通用列表的内存。

3 个答案:

答案 0 :(得分:1)

仅在List中存储您需要的内容。

答案 1 :(得分:-1)

我认为,从列表中删除未使用的项目就足够了。所以名单没有增长到300,000条记录 如果没有为对象设置引用(ReferenceCounter == 0),gc将收集它,...将来...... 所以我认为你的主要问题应该是,你想对300,000多个参赛作品做些什么呢?是否有必要将它们全部保留下来?
如果是:可能代理或Flyweight模式可以轻松解决您的问题。由于重型物体的LazyLoading,您可以保存小型Objekts列表,它只会通过显式调用来加载它们的重量级内容。
现在它变得更好了,使用Flyweight模式,您还可以存储一些基本信息(例如MetaData),例如图像,大小,而不加载完整的重图像。
因此,如果您无法减少Listentry计数,只需减少对象的MemoryFootprint。

p.s。:在确定的睡眠时间后,Flyweights也可以在规定的时间内收缩它们的重物。

答案 2 :(得分:-1)

清除列表并运行GC.Collect();两次。

如果我没记错的话,GC第一次传递一个未引用的项目时会将其标记为垃圾收集,第二次传递它会将其从内存中删除。 (如果我错了,请告诉我。)

仍然无法保证内存会被清除,但它会尽可能地远离你。