web-dev-qa-db-ja.com

XamarinでOutOfMemoryExceptionを取得する

Java.lang.OutOfMemoryError。 $(JavaMaximumHeapSize)の値を増やすことを検討してください。 Java 'Java.exe'の実行中にメモリが不足しました

Visualstudio Xamarinプロジェクトでメモリ不足の例外が発生しています。この問題を解決する方法を教えてください。

68
Srinivas Ch

ビルドヒープサイズを増やします。

Android Projectを右クリックして、Properties>Android Options>Advanced>Java Max Heap Size.

enter image description here

118
Iain Smith

選択した答えは正しい方向に私を導きますが、Visual Studio 2017の場合、画面は次のようになります。

VS 2017 Updated Screens

VS 2017 Updated Screens

17
mrogunlana

ビルドプロセスではなく、アプリケーションのヒープサイズを増やしたい場合は、AndroidManifest.xmlでこれを設定できます。

<application Android:largeHeap="true"></application>
16
Matt

Visual Studio 2015の場合は、[プロジェクト]-> [プロパティ]-> [Androidオプション]-> [詳細]および[ヒープサイズ]を右クリックします。

12
DavidM

Xamarin studioバージョン6.3およびvisual studio 7.0.1の時点で、ヒープサイズを増やすオプションはこちらにあります。

Androidプロジェクトを右クリックして、optionsを選択し、Build/Android Build、次にAdvancedタブと設定1G(または何か)inJavaヒープサイズ

enter image description here

3
Durai Amuthan.H

1Gヒープサイズを使い果たしたら、リソースの最適化を開始します。

最初にイメージインスタンスを複製していないかどうかを確認し、同じイメージをメモリに数回保持します。そのためにはffimageloadingライブラリを使用します( https://github.com/luberda-molinet/FFImageLoading )nugetですばやく簡単に入手します。

次に、使用している画像を最適化します。アイコン以外の大きな画像の場合、透過的なpngを避けて、すべてをjpegに変換してみてください。

次に、リモートに大きなアップロード画像がある場合は、画像の代わりにサムネイルを使用してみてください。サーバー上で、ミニ、スモール、ミディアム、ノーマル、ラージ、xラージなどの異なるサイズのサムネイルを事前に作成し、本当に必要なサイズの画像のみをロードします。それは多くのメモリと速度を節約します。

もう1つは、メモリリークです。セルや他の要素がメッセージ、イベントハンドラー、およびその他のサブスクリプションからサブスクライブ解除されなかった場合、メモリー内にまだ存在する可能性があります。起こり得ないと確信しているときに、まだメモリに残っている画像でいっぱいのリストのコピーをいくつか持つことができると想像してください。詳細はこちら:

https://forums.xamarin.com/discussion/123876/should-we-unsubscribe-all-events-for-memory-management

https://forums.xamarin.com/discussion/87206/messaging-center-unsubscribe-from-all-messages-when-broadcast-stops

3
Nick Kovalsky

私の経験では、メモリの問題はAndroidバージョンのXamarin.Formsアプリでのみ発生します。そして、常に大きなサイズの画像を処理する必要があります。 FFImageLoading( https://github.com/luberda-molinet/FFImageLoading )を使用してこの問題に対処しました

交換してください

<Image Source="waterfront.jpg" />

<ffimageloading:CachedImage Source="waterfront.jpg"
DownsampleToViewSize = true,
BitmapOptimizations = true/>

パフォーマンスが大幅に向上し、メモリの問題も解決します。

2
Dylan Liu

AndroidManifiest.xmlのアプリケーションタグに以下を追加するのを修正しました

<application  Android:largeHeap="true" Android:label="sample"></application>
0
Divya

Java最大ヒープサイズを増やすとうまくいきます

enter image description here

0
fulgen