【问题标题】:Silverlight: Clear unused memory on navigating to another pageSilverlight:在导航到另一个页面时清除未使用的内存
【发布时间】:2011-09-20 03:21:45
【问题描述】:
我的 silverlight 应用程序有很多页面,并使用导航服务在页面之间导航。其中一个页面从 Web 服务中获取大量 (~1G) 数据。由于垃圾收集不会自动发生,所以当我返回上一页(主页)时,我需要清除该页中分配的内存。
我尝试覆盖OnNavigatedFrom 方法并尝试将对象引用分配给null 并通过GC.Collect() 强制进行垃圾回收。但是内存没有被清除。我注意到,如果我刷新主页,内存会急剧下降。如何以编程方式进行内存清除。
【问题讨论】:
标签:
silverlight
memory-management
【解决方案1】:
手动调用CG.Collect 不是一个好主意,而且在任何情况下 GC.Collect 都无助于消除内存泄漏。通过标准 CG 行为,可以空闲的内存是免费的。也许寻找内存不会自动释放的原因会在某处证明一些错误。
【解决方案3】:
我清除内存的一种方法是重新加载页面,或者让同一个应用程序跨多个 asp.net 页面...
因此,它将卸载应用程序(释放所有内存)并重新加载应用程序,而不是导航。我知道大师们会讨厌这个短视的答案,但这是我能够有效地进行内存转储的唯一方法。
例如,假设您的应用位于 default.aspx 中,而不是导航到 default.aspx#control1 之类的内容,而是将同一个应用放在新页面中,例如 control1.aspx 并导航到 control1.aspx#control1。要么这样,要么您可以将应用程序分成多个应用程序以跨多个页面加载。
我注意到从中获得了巨大的收益。