【问题标题】:Memory consumption in Magick.NETMagick.NET 中的内存消耗
【发布时间】:2016-01-12 21:09:52
【问题描述】:

我在函数中有以下代码行。它从Amazon S3 读取图像。我正在阅读的图像大小为 1.37 MB,当我运行分析器时,它说图像魔法库中的读取功能需要 5.6 MB,这非常高。谁能解释这种行为?我附上了我的分析器的快照以及代码。

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

【问题讨论】:

    标签: imagemagick imagemagick.net


    【解决方案1】:

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

    【讨论】:

    • 感谢您的解释。您能否也给我一些关于 GO lang 的参考资料。此外,性能方面,GO 版本的 Image Magick 或 Magick.Net 会更好
    • 我没有使用 ImageMagick 的 GO 包装器的经验,您可能必须自己进行性能比较。
    • 您能否更详细地解释将图像存储在内存中与磁盘相比有何不同。当将图像加载到内存中时,通常会发生这种情况吗?
    • 我在答案中添加了一个简单的解释,是的,大多数情况下,由于压缩,它会在内存中使用更多的内存而不是在磁盘上。
    • 我还看到这段代码中的内存利用率不断增加。即使在处理客户端和图像魔法对象之后。你能否也请告诉为什么会这样。当应用程序池每天回收时,在生产服务器上。它会减少。库中是否有任何内存泄漏或这是正常行为
    猜你喜欢
    • 2010-10-12
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    • 2010-10-27
    • 2011-12-13
    • 2011-10-03
    • 2012-11-24
    • 2013-10-08
    相关资源
    最近更新 更多