2016-01-12 204 views
1

我在函数中有以下几行代码。它从Amazon S3中读取图像。我正在阅读的图像大小为1.37 MB,因为当我运行探查器时,它说图像magick库中的读取功能需要5.6 mb,这非常高。谁能解释这种行为?我附加了我的分析器以及代码的快照。Magick.NET中的内存消耗

AmazonS3 client = Amazon.AWSClientFactory.CreateAmazonS3Client(
         accessKey, 
         secretKey 
         ); 

       GetObjectRequest request = new GetObjectRequest 
       { 
        BucketName = bucketName, 
        Key = keyName 
       }; 

       var response = client.GetObject(request);     
       MagickImage imgStream = new MagickImage(response.ResponseStream); 

enter image description here

回答

1

磁盘上的图像尺寸是不适合的存储图像的大小很重要。所需的内存量与图像的尺寸(宽度/高度)有关。当图像加载时,原始数据被“转换”为像素数据。对于每个通道,Magick.NET将使用每像素8或16位(Q8/Q16)。所以,当你有一个4通道图像(RGBA),并且你使用的是Q16版本的Magick.NET时,你将使用每像素64位。对于1920x1080的图像,您将需要1920*1080*64 = 132710400 bits,即约16.5 Megabytes。磁盘上的大小在大多数情况下会更小,因为大多数图像格式在将像素数据保存到磁盘时会将其压缩。

+0

感谢您的解释。你能否也请给我一些参考GO朗做同样的事情。此外,性能明智的将图像Magick的GO版本会更好或Magick.Net – Naresh

+0

我没有与ImageMagick GO包装的经验,你可能必须做自己的性能比较。 – dlemstra

+0

可以更详细地解释将图像存储在内存中与磁盘相比时它有何不同?这种情况一般发生在将图像加载到内存中时发生。 – Naresh