在我的Silverlight应用程序中,我创建了一个带有自定义类的通用列表对象。我有大约3个(300,000)个记录。我必须经常将不同的数据绑定到同一个列表,但有时我会出现内存不足错误。
如何在C#.NET中释放自定义类通用列表的内存。
答案 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第一次传递一个未引用的项目时会将其标记为垃圾收集,第二次传递它会将其从内存中删除。 (如果我错了,请告诉我。)
仍然无法保证内存会被清除,但它会尽可能地远离你。