Silverlight 为什么要使用observeCollection.Clear()而GC没有';行不通

Silverlight 为什么要使用observeCollection.Clear()而GC没有';行不通,silverlight,windows-phone-7,garbage-collection,observablecollection,Silverlight,Windows Phone 7,Garbage Collection,Observablecollection,当我使用Clear()方法时,我有一个ObservableCollection绑定到Pivot中的一个listbox。似乎GC没有回收。因此,当我不断清除可观察到的集合时,内存不断增加。有人知道为什么会发生这种情况吗?WP7上的垃圾回收行为与其他.Net垃圾回收器不同。它被编程为仅在内存使用超过特定级别时运行 另外,请记住,Mango中的垃圾收集器已经发生了变化:在最初的WP7中,垃圾收集器是不分代的,而在Mango中,它现在是分代的 如果你非常想清除内存,那么GC.Collect()(Wind

当我使用Clear()方法时,我有一个ObservableCollection绑定到Pivot中的一个listbox。似乎GC没有回收。因此,当我不断清除可观察到的集合时,内存不断增加。有人知道为什么会发生这种情况吗?

WP7上的垃圾回收行为与其他.Net垃圾回收器不同。它被编程为仅在内存使用超过特定级别时运行

另外,请记住,Mango中的垃圾收集器已经发生了变化:在最初的WP7中,垃圾收集器是不分代的,而在Mango中,它现在是分代的

如果你非常想清除内存,那么GC.Collect()(WindowsPhone7) 或GC.Collect(3)(仅限Windows Phone 7 Mango)


这就是你想要的。执行此操作将暂停应用程序,因此在用户接受暂停的情况下执行此操作是有意义的-可能在您更改屏幕或保存数据之后是执行此操作的好时机。

我对Silverlight不太了解,但一般来说:调用
Clear
之类的方法不会强制GC运行,它只会删除一些引用。缺少这些引用可能会允许GC在运行时收集更多的对象,但是当(严格地说,甚至是它是否运行)它运行时既不在您的控制之下(忽略
System.GC()
,或者不管它调用什么,这几乎总是一个坏主意),也不应该让您担心。我们要花多长时间,消耗多少内存?另外,从列表中清除引用并没有必要杀死它们,除非你绝对确定它们没有被引用到其他地方。此外,在性能方面,还有比一个简单的列表框更值得关注的事情。我理解你所说的GC。但我仍然有一个问题。我现在正在编写一个WP7应用程序。主页有一个包含七个数据透视项的数据透视。每个数据透视项都有一个绑定到ObservableCollection的列表框。当我从主页导航时,我清除了ObservableCollection。但是当我从另一个页面返回主页时,内存会稍微减少。如果我多次从主页导航,内存将超过WP7应用程序的内存限制。如何处理此问题?@Joel-您对此仍有问题吗?如果是这样的话,我能建议你提交一个新问题来澄清手头的真正问题吗?从根本上说,您不(也不应该)关心垃圾收集何时运行,您关心的是内存是否耗尽。我说得对吗?你的问题标题不会给你你想要的答案。只是一个想法。同时,我会考虑一下你的问题。干杯