2011-06-22 71 views
0

我的Silverlight应用程序有很多页面,并使用导航服务在页面之间导航。其中一个页面从Web服务中获取大量(〜1G)数据。由于垃圾收集不会自动发生,因此当我回到上一页(主页)时,我需要清除在该页面中分配的内存。 我试着重写OnNavigatedFrom方法,并尝试将对象引用分配给null,并强制通过GC.Collect()执行垃圾回收。但内存没有被清除。我注意到,如果我刷新主页,内存就会急剧下降。如何以编程方式进行记忆清除。Silverlight:在导航到另一页面时清除未使用的内存

回答

3

手动调用CG.Collect不是一个好主意,并且在任何情况下GC.Collect都不会帮助消除内存泄漏。标准CG行为可以免费使用内存。也许寻找内存不会自动释放的原因会在某处出现某些错误。

0

您将需要花费大量的时间跟踪内存泄漏,这可能是一个痛苦的过程。有一些很好的工具可以帮助你。

这里见我以前的帖子:Silverlight 4 memory leaks

0

一个我已清除内存的方法是重新加载页面,或有多个asp.net页面相同的应用程序跨度...

因此,不会导航,它会卸载应用程序(释放所有内存)并重新加载应用程序。我知道大师们会讨厌这个短视的答案,但这是我有效地获得内存转储的唯一途径。

一个例子是说你的应用程序是在default.aspx和,而不是导航到类似default.aspx#control1,你把相同的应用程序像control1.aspx一个新的页面,并导航到control1.aspx#control1。或者,您可以将应用程序分成多个应用程序,以便跨多个页面加载。

我注意到这方面的巨大收益。

相关问题