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

我正在尝试在我的应用程序中使用 Microcharts 图表,该应用程序使用 Xamarin.Forms(针对 Android、iOS 和 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 中时,似乎是在通过后面的代码初始化图表时导致问题。

【问题讨论】:

    标签: xamarin xamarin.forms


    【解决方案1】:

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

    【讨论】:

    • 我不建议在不知道导致 OOM 异常的原因的情况下使用 LargeHeap = true,因为这并不意味着它不会出现在内存比您测试过的设备少的其他设备上。而是从最低版本开始,而不是添加和迭代。我要开始的一件事是使用简单的字符串而不是条目。它有效吗?去一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2019-08-08
    • 1970-01-01
    相关资源
    最近更新 更多