为什么使用 ObservableCollection.Clear() 但 GC 不起作用
当我使用 Clear() 方法时,我有一个 ObservableCollection 绑定到数据透视表中的列表框。看来GC没有回收。因此,当我不断清除 ObservableCollection 时,内存不断增加。有谁知道为什么会发生这种情况?
I have a ObservableCollection which binding to a listbox in the Pivot, when i used the method Clear(). It seems to the GC didn't recycle. So when i keep Clearing the ObservableCollection, the memory keep incresing. Any one know why this happened?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
WP7 上的垃圾收集行为与其他 .Net 垃圾收集器不同。它被编程为仅在内存使用量超过特定级别时运行。
另外,请记住,Mango 中的垃圾收集器已发生变化:在最初的 WP7 中,垃圾收集器是非分代的,而在 Mango 中,它现在是分代的。
如果您迫切需要清除内存,请使用 GC.Collect() (Windows Phone 7)
或 GC.Collect(3)(仅限 Windows Phone 7 Mango)
将是您所需要的。执行此操作将暂停应用程序,因此在用户接受暂停的情况下执行此操作是有意义的 - 可能在您更改屏幕或保存数据之后是执行此操作的好时机。
Garbage collection on WP7 behaves differently from other .Net garbage collectors. It's programmed only to run when memory usage exceeds a specific level.
Also, keep in mind that the garbage collector has changed in Mango: In the original WP7 the garbage collector was non-generational, in Mango it is now generational.
If you're desperate to clear down memory then GC.Collect() (Windows Phone 7)
or GC.Collect(3) (Windows Phone 7 Mango only)
will be what you're after. Doing this will pause the application so it makes sense to do this where the user will accept a pause - probably just after you change screens or save data are good times to do this.