xamarin - Xamarin Forms Microcharts 生成“OutOfMemoryError”
问题描述
我正在尝试在我的应用程序中使用 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 中,似乎是在通过后面的代码初始化图表时导致了问题。
解决方案
我添加<application android:hardwareAccelerated="true" android:largeHeap="true"></application>
到我的 AndroidManifest.xml 并且这工作正常,但是我仍然不知道是什么导致使用这么多内存。
推荐阅读
- azure - 如何获取 azure market place 发布者 ID 和产品信息?
- javascript - 更简单的写法: if (routine !== null && routine.exercises !== undefined &&routine.exercises.length > 0)
- javascript - 如何测试`fn`是否是一个函数(可调用)?
- mysql - 相对于 SQL 中另一列中的值创建一个新的增量列
- c++ - 为什么这个 C++ ASIO, BEAST 服务器在执行 HTTPS/SSL 请求时会进入错误状态
- mysql - 有没有办法编写查询来显示给定日期的在线工作数据以及要遵循的任何以前的工作数据?
- regex - 正则表达式删除重复项
- java - SpringBoot 多模块考虑在你的配置中定义一个 bean 类型
- php - 如何在PHP中获取IP地址的内容
- c# - iCalendar / InvalidRecipientsException:无法发送消息,因为它不包含收件人