我在一些旧的Android
设备上运行我的应用程序时遇到了一些问题,因此我下载了Visual Studio Professionel的痕迹,因为它具有Diagnostics Tools
。
我尝试在我的应用程序中做一些简单的事情,但我发现吓人了,Xamarin.Forms.BindableProperty+BindablePropertyContext
在UWP中需要2.196.088
的大小(当然以字节为单位),您可以在下面的屏幕转储中看到。
。
在示例中,我刚刚浏览了5页。在其中两个页面上有ListViews
,其中一个页面已被清除3次,并填充了新数据。
那么清除GC.Collect()
后是否必须调用ListView
吗?
最佳答案
我遇到过类似的问题-多次浏览页面会导致OutOfMemoryException。对我来说,解决方案是使用显式Dispose()调用实现页面的自定义呈现。
public class CustomPageRenderer : PageRenderer
{
private NavigationPage _navigationPage;
protected override void OnElementChanged(ElementChangedEventArgs<Page> e)
{
base.OnElementChanged(e);
_navigationPage = GetNavigationPage(Element);
SubscribeToPopped(_navigationPage);
}
private void SubscribeToPopped(NavigationPage navigationPage)
{
if (navigationPage == null)
{
return;
}
navigationPage.Popped += OnPagePopped;
}
protected override void Dispose(bool disposing)
{
Log.Info("===========Dispose called===========");
base.Dispose(disposing);
}
private void OnPagePopped(object sender, NavigationEventArgs args)
{
if (args.Page != Element)
{
return;
}
Dispose(true);
_navigationPage.Popped -= OnPagePopped;
}
private static NavigationPage GetNavigationPage(Element element)
{
if (element == null)
{
return null;
}
while (true)
{
if (element.Parent == null || element.Parent.GetType() == typeof(NavigationPage))
{
return element.Parent as NavigationPage;
}
element = element.Parent;
}
}
}
您也可以看一下here,但在处理图像时需要小心,如果其父页面位于导航堆栈中并且您想返回,则可能会导致一些问题。
关于c# - Xamarin中的大量内存使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42851517/