JTI*_*TIM 21 c# memory visual-studio windows-phone windows-phone-8
我做了一个Windows手机应用程序,不幸的是有一些内存泄漏,因为页面没有正确删除.通过使用答案解决了这个问题:
protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
while (App.RootFrame.RemoveBackEntry() != null) ; //line if you navigate without backkey
base.OnNavigatedTo(e);
this.Dispatcher.BeginInvoke(() =>
{
GC.Collect();
GC.WaitForPendingFinalizers();
this.Dispatcher.BeginInvoke(() =>
{
GC.Collect();
GC.WaitForPendingFinalizers();
this.Dispatcher.BeginInvoke(() =>
{
GC.Collect();
GC.WaitForPendingFinalizers();
});
});
Run Code Online (Sandbox Code Playgroud)
}
这从分析器中删除了页面引用.但是导航时内存仍然增加了一些.并且增加记忆的来源并不明显.因此,我尝试引入一个空白项目并导航到星空导航,如下所示:

这使得移除了超过20 mb的视觉效果和其他元素.所以这是一个重要的步骤.因此,我希望将功能分解到不同的项目中,以消除不同功能之间的任何联系并保持较低的内存使用率.最终得到以下结构:
我使用Portable Library在所有项目之间共享模型.这影响了每次导航到新项目时,旧项目中的所有内容都被清除,即每个项目只有一个元素存在,主要内存改进.但仍有一些内存泄漏,无论多么有限,意味着内存只有一定的增加.但内存来自哪里?回到探查器:

这表明页面没有被特定删除,所有元素.view.将被一个项目中所有页面的配置中的代码删除.但是内存泄漏是类似的.
问题
两个项目之间没有共享信息,除了它们都可以创建一个版本LibraryOfModels.因此,项目边界不会共享任何事件,变量或引用.但对于我的生活,我无法将它从记忆中删除.我想将它们从内存中删除,因为我的代码片段位于顶部,如果导航仅在一个项目中.问题的存在是因为导航分布在两个项目上.但它在其他领域有一些记忆优势,这就是我想要这种结构的原因.
希望有人可以提供帮助.谢谢!
附加测试
我已经尝试使所有页面用户控制,以便我可以避免导航.但重建它们几次gav稳定泄漏1-2 Mb.因此,项目理念仍然是最好的,因为有一个限制.但仍然没有解决方案将其删除.
仍然希望骑士与闪亮的键盘;)
| 归档时间: |
|
| 查看次数: |
611 次 |
| 最近记录: |