画像をメモリにロードするときに、まったく同じ C# コードが画像を保持するためにより多くのメモリを使用することに他の誰かが気付いたかどうかを確認したいだけです (Java では約 1.5 倍)。
この Java コードの合計メモリ サイズは105.5 MBになります。
Bitmap[] bitmaps = new Bitmap[100];
for (int i = 0; i < 100; i++)
{
String root = Environment.getExternalStorageDirectory().getAbsolutePath();
String imagePath = "/evolution/threesixty/216/Edaphosaurus_001.jpg";
bitmaps[i] = BitmapFactory.decodeFile(root + imagePath);
}
この C# コードの結果は148.1 MBになります。
Bitmap[] bitmaps = new Bitmap[100];
for (int i = 0; i < 100; i++)
{
string root = Environment.ExternalStorageDirectory.AbsolutePath;
string imagePath = "/evolution/threesixty/216/Edaphosaurus_001.jpg";
bitmaps[i] = BitmapFactory.DecodeFile(root + imagePath);
}
誰かが理由について何か考えを持っていますか? .NET ラッパーが追加のバインディング データなどを保持するためにもう少し使用する可能性があることは理解していますが、それだけではないのでしょうか?
また、副次的な質問として、各イメージはディスク上で60 KBしかないのに、インメモリ バージョンが1 MB なのはなぜですか? 私の読み込み方法がサンプリング/密度チェックを行わないことは知っていますが、それは目的ではありませんでした。100KB未満の画像をロードしても、100KBのメモリスペースを超えてはいけませんか?
これが私が使用している画像です(994x748px @ 300dpi):