Silverlight:导航到另一个页面时清除未使用的内存

时间:2011-06-22 07:07:40

标签: silverlight memory-management

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

3 个答案:

答案 0 :(得分:3)

手动调用CG.Collect不是一个好主意,无论如何GC.Collect无助于消除内存泄漏。标准的CG行为可以免费提供免费的内存。也许寻找内存不会自动释放的原因会证明某些错误。

答案 1 :(得分:0)

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

请在此处查看我之前的帖子:Silverlight 4 memory leaks

答案 2 :(得分:0)

我清除内存的一种方法是重新加载页面,或者在多个asp.net页面上使用相同的应用程序...

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

例如,您的应用位于default.aspx,而不是导航到default.aspx#control1之类的内容,而是将相同的应用放在control1.aspx这样的新页面中,然后导航到{{ 1}}。或者,或者您可以将应用程序分成多个应用程序,以便在多个页面中加载。

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