Imagemagick Magick.NET中的内存消耗

Imagemagick Magick.NET中的内存消耗,imagemagick,imagemagick.net,Imagemagick,Imagemagick.net,我在函数中有以下代码行。它从Amazon S3中读取图像。我正在读取的图像大小是1.37MB,当我运行分析器时,它说图像magick库中的读取函数需要5.6MB,这非常高。有人能解释这种行为吗?我正在附加我的探查器的快照以及代码 AmazonS3 client = Amazon.AWSClientFactory.CreateAmazonS3Client( accessKey, secretKey

我在函数中有以下代码行。它从Amazon S3中读取图像。我正在读取的图像大小是1.37MB,当我运行分析器时,它说图像magick库中的读取函数需要5.6MB,这非常高。有人能解释这种行为吗?我正在附加我的探查器的快照以及代码

 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);

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

感谢您的解释。请你也给我一些参考,让GO lang做同样的事情。此外,performance wise will GO版本的Image Magick会更好,或者Magick。NetI没有使用ImageMagick的GO包装器的经验,您可能需要自己进行性能比较。您能否更详细地解释一下,当您将图像存储在内存中时,它与磁盘相比有何区别。当将图像加载到内存中时,通常会发生这种情况吗?它会膨胀。我对答案添加了一个简单的解释,是的,大多数情况下,由于压缩,它会在内存中使用更多的内容,而不是在磁盘上。在这段代码中,我还看到内存利用率不断增加。即使在处理客户端和映像magick对象之后。你能告诉我原因吗。在生产服务器上,应用程序池每天进行回收。它会减少。库中是否存在内存泄漏或这是正常行为