【发布时间】:2020-09-06 10:13:35
【问题描述】:
我的应用中有一些页面。
当我的一个页面打开时while 循环创建 1000 个按钮(例如)。
在我在页面之间导航并返回第一页之后,对象(按钮)再次创建它。
我得到内存泄漏。我该如何解决这个问题?
public sealed partial class BlankPage1 : Page
{
public BlankPage1()
{
this.InitializeComponent();
int i = 0;
while(i < 1000)
{
Button button = new Button();
MainStack.Children.Add(button);
i++;
}
}
private void HyperlinkButton_Click(object sender, RoutedEventArgs e)
{
Frame.Navigate(typeof(BlankPage2));
}
}
}
【问题讨论】:
-
MainStack的定义和容器是什么?您是如何得出这是实际泄漏的结论(调试器、诊断程序、工具)? -
MainStack 是 StackPanel (System.Windows.Controls)。我怎么来的? ~ 每次打开页面都会使用 +20mb 的 RAM。垃圾收集器不起作用。内存使用持续存在
-
我尝试了一些临时解决方案:我用
this.NavigationCacheMode = Windows.UI.Xaml.Navigation.NavigationCacheMode.Enabled;缓存了一个页面,并在页面加载时添加了一个检查:if (SomeClass.ObjectsExist == false)然后CreateObjects()else//什么都不做。方法CreateObjects将SomeClass.ObjectsExist更改为true。对吗?
标签: c# button while-loop uwp memory-leaks