我使用xamarin在c#中开发了一个android应用程序。它使用了大量的内存。很长一段时间,我使用较弱的2GB设备成功运行它。现在我换了4GB设备的手机,突然间出现了内存异常。这是由创建更大的位图造成的。如何增加c#xamarin应用程序中的堆大小?
在这里你可以看到输出:
(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,因此这是更多内存使用的原因。 – hoacin