【发布时间】:2017-09-05 21:57:57
【问题描述】:
我使用 xamarin 在 c# 中开发了一个 android 应用程序。它使用大量内存。长期以来,我使用较弱的 2GB 设备成功运行它。现在我将手机更换为 4GB 设备,突然出现内存不足异常。这是由创建较大的位图引起的。
在这里你可以看到输出:
(13022): Starting a blocking GC Alloc
(13022): Clamp target GC heap from 271MB to 256MB
(13022): Alloc concurrent mark sweep GC freed 4(96B) AllocSpace objects, 0(0B) LOS objects, 0% free, 255MB/256MB, paused 172us total 13.525ms
(13022): Forcing collection of SoftReferences for 833KB allocation
(13022): Starting a blocking GC Alloc
(13022): Clamp target GC heap from 271MB to 256MB
(13022): Alloc concurrent mark sweep GC freed 5(120B) AllocSpace objects, 0(0B) LOS objects, 0% free, 255MB/256MB, paused 175us total 13.474ms
(13022): Out of memory: Heap Size=256MB, Allocated=255MB, Capacity=256MB
我尝试了设置Java Max Heap Size = 1G 和写入清单android:largeHeap="true" 的所有可能组合,推荐here,但它仍然说我只有256MB,在同一点崩溃。任何想法为什么我没有获得更多的堆内存?系统中有大量可用内存。到时候,我会做一些优化,但现在我想用我的测试设备的全部功能来编写简单的代码。我查看了各种文章、问题和两个突出显示的操作之一,总能解决问题。我不知道我的代码中有什么条件错误。
编辑:
这是整个清单文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="AlienChessAndroid.AlienChessAndroid" android:versionCode="1" android:versionName="1.0" android:largeHeap="true" android:installLocation="auto">
<uses-sdk android:minSdkVersion="23" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<application android:label="Alien Chess" android:icon="@drawable/Alien">
</application>
</manifest>
【问题讨论】:
-
如果您的应用程序在 2GB 设备上运行良好但在 4GB 设备上运行良好,并且
android:largeHeap="true"不适用于您的问题,则表示已连接?你能显示你的清单代码吗? -
@GraceFeng-MSFT 我用清单文件编辑了问题。我在我的应用程序中绘制了相当多的位图,并且显示从 HD 增长到 Quad HD,所以这就是使用更多内存的原因。
标签: xamarin.android heap-memory