Xamarin Forms Microcharts 生成“OutOfMemoryError”

Posted

技术标签:

【中文标题】Xamarin Forms Microcharts 生成“OutOfMemoryError”【英文标题】:Xamarin Forms Microcharts generating "OutOfMemoryError" 【发布时间】:2018-12-31 21:24:43 【问题描述】:

我正在尝试在我的应用程序中使用 Microcharts 图表,该应用程序使用 Xamarin.Forms(针对 androidios 和 UWP)。

我尝试了几个教程来显示图表,但每次都会导致错误:

未处理的异常: Java.Lang.OutOfMemoryError:无法分配 240048012 字节分配,其中 5713730 字节和 87MB 直到 OOM

如果我创建一个新的 Xamarin.Forms 项目,则不会发生此错误并且它运行得非常好(我在同一台 Android 设备上运行,三星 SM-J320FN)。

这是简化的 XAML 代码:

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="Foo.DetailPage" xmlns:forms="clr-namespace:Microcharts.Forms;assembly=Microcharts.Forms"> <ContentPage.Content>

<StackLayout Grid.Row="2"> <forms:ChartView x:Name="priceChart" HeightRequest="150"/> </StackLayout>

下面是代码:

//Temp data for charts List<Entry> entries = new List<Entry> new Entry(200) Color=SKColor.Parse("#FF1943"), Label ="January", ValueLabel = "200" , new Entry(400) Color = SKColor.Parse("00BFFF"), Label = "March", ValueLabel = "400" , new Entry(-100) Color = SKColor.Parse("#00CED1"), Label = "Octobar", ValueLabel = "-100" , ;

public DetailPage(string Code)

     ((NavigationPage)Application.Current.MainPage).BarBackgroundColor = Color.FromHex("27b286");

    InitializeComponent();

    priceChart.Chart = new LineChart()  Entries = entries, BackgroundColor = SKColor.Parse("#00FFFFFF") ;

没有这个图表,页面可以运行得非常好,即使在生成列表并且图表包含在 XAML 中时,似乎是在通过后面的代码初始化图表时导致问题。

【问题讨论】:

【参考方案1】:

我在我的 AndroidManifest.xml 中添加了&lt;application android:hardwareAccelerated="true" android:largeHeap="true"&gt;&lt;/application&gt;,这工作正常,但我仍然不知道是什么导致使用这么多内存。

【讨论】:

我不建议在不知道导致 OOM 异常的原因的情况下使用 LargeHeap = true,因为这并不意味着它不会出现在内存比您测试过的设备少的其他设备上。而是从最低版本开始,而不是添加和迭代。我要开始的一件事是使用简单的字符串而不是条目。它有效吗?去一个。

以上是关于Xamarin Forms Microcharts 生成“OutOfMemoryError”的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.Forms:如何在 Xamarin.Forms 跨平台项目中开发具有蓝牙连接的应用程序?

Xamarin.Forms:Forms.Context 已过时

Xamarin.Forms 手势密码实现

Xamarin.Forms 和 Xamarin Native 有啥区别? [关闭]

如何使用 Xamarin.Forms.Maps(无 Xamarin.Forms.GoogleMaps)在地图中应用样式或更改颜色

Xamarin Forms Prism:prism ResourceDictionary 中已存在具有键“Xamarin.Forms.NavigationPage”的资源