gpt4 book ai didi

c# - Xamarin 中的大量内存使用

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:10:38 35 4
gpt4 key购买 nike

我在一些旧的 Android 设备上运行我的应用程序时遇到了一些问题,因此我下载了 Visual Studio Professionel 的踪迹,因为它有诊断工具

我尝试在我的应用程序中做一些简单的事情,但我发现这很可怕,Xamarin.Forms.BindableProperty+BindablePropertyContext 的大小(当然以字节为单位)为 2.196。 UWP 中的 088,您可以在以下屏幕转储中看到它。

UWP Managed memory .

在示例中,我刚刚浏览了 5 个页面。在其中 2 个页面上有 ListViews,其中一个已被清除 3 次,并填充了新数据。

那么我是否必须在清除 ListView 后调用 GC.Collect()

最佳答案

我遇到过类似的问题 - 浏览页面几次导致 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/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com