tag*_*y22 27 c# memory win-universal-app windows-10 uwp
我有一个UWP Windows 10应用程序,并注意到任务管理器中的内存使用量随着时间的推移而增加.
我将应用程序剥离,发现导航页面时内存正在增加.所以我制作了一个只有几页的简单应用程序来测试,在这个简单的应用程序中内存仍在增加.我有一个MainPage,可以将一个帧从Page1导航到Page2,然后返回一个计时器.
public sealed partial class MainPage : Page
{
private DispatcherTimer _timer;
private bool _page1Showing;
private bool _timerRunning;
public MainPage()
{
this.InitializeComponent();
_timer = new DispatcherTimer();
_timer.Interval = new TimeSpan(0, 0, 0, 0, 200);
_timer.Tick += _timer_Tick;
}
private void _timer_Tick(object sender, object e)
{
GC.Collect();
this.rootFrame.BackStack.Clear();
this.rootFrame.ForwardStack.Clear();
if (_page1Showing)
{
this.rootFrame.Navigate(typeof(Page2));
_page1Showing = false;
}
else
{
this.rootFrame.Navigate(typeof(Page1));
_page1Showing = true;
}
}
private void Button_Click(object sender, RoutedEventArgs e)
{
if (_timerRunning)
{
_timer.Stop();
_timerRunning = false;
}
else
{
_timer.Start();
_timerRunning = true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
Page1和Page2是带有背景颜色网格的空白页面,因此您可以看到导航.当这个App运行时,任务管理器中的内存使用量每30分钟增加大约1MB.
我已经使用VS2015中的内存诊断运行应用程序托管堆正如预期的那样:
堆总是在增加:
比较堆的快照显示:
我很困惑这些McgInterop对象是什么?为什么这样一个简单的应用程序总是增加内存使用量.我的主应用程序需要运行很长时间(月+).感谢任何帮助.
我尝试更改NavigationCacheMode页面,如果设置为Required,则创建一次页面.如果设置为禁用,则每次都会创建页面,并且我检查了终结器是否按预期调用.
-
编辑:我添加了一个按钮来启动和停止计时器(更新上面的内容).似乎在计时器运行时,任务管理器中的内存使用量将增加,当计时器停止时,内存使用量最终会下降.
我在一天内测量了任务管理器中的内存使用情况,每隔2小时开始计时一次,如下所示,它会慢慢增加然后在某个时刻下降:
12.5 - > 17.1 - > 16.7 - > 13.9 - > 16.8 - > 22.5 - > 13.6 - > 14.6 - > 24.9 - > 15.2
所以我猜一切都运转良好?但我不清楚这里发生了什么,为什么它会增加这么多?什么时候在什么条件下免费?
系统是否在页面导航时延迟释放内存?当用户通常与屏幕交互时?
我们可以看看你的xaml代码吗?您是否在 xaml 中使用 x:name 并且它被破坏了?如果是这样,可能会导致您的内存泄漏。
如果您使用的是 x:name,请查看此链接: http://support.scichart.com/index.php? /News/NewsItem/View/21/wpf-xname-memory-leak--how-to-clear- scichart 内存
当然,UWP 可能会以不同的方式处理 x:name...
| 归档时间: |
|
| 查看次数: |
3106 次 |
| 最近记录: |