Потребление памяти в Magick.NET

У меня есть следующие строки кода в функции. который читает изображение из Amazon S3, Размер изображения, которое я читаю, составляет 1,37 МБ, тогда как когда я запускаю профилировщик, он говорит, что функция чтения в библиотеке изображений и изображений занимает 5,6 МБ, что очень много. Кто-нибудь может объяснить это поведение? Я прилагаю снимок моего профилировщика, а также код.

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

введите описание изображения здесь

1 ответ

Размер вашего изображения на диске не имеет значения для размера изображения в памяти. Объем памяти, который необходим, связан с размерами (шириной / высотой) вашего изображения. Когда изображение загружено, необработанные данные преобразуются в пиксельные данные. Для каждого канала Magick.NET будет использовать 8 или 16 бит на пиксель (Q8/Q16). Таким образом, когда у вас есть изображение с 4 каналами (RGBA) и вы используете версию Magick.NET для Q16, вы будете использовать 64-битное значение на пиксель. Для изображения 1920x1080 вам понадобится 1920*1080*64 = 132710400 bitsи это вокруг 16.5 Megabytes, Размер на диске в большинстве случаев будет меньше, потому что большинство форматов изображений сжимают данные пикселей, когда сохраняют их на диск.

Другие вопросы по тегам