我只是想看看是否有其他人注意到,当将图像加载到内存中时,完全相同的 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):