2016-09-27 82 views
0

我正在努力与Magick.NET库,因为当转换图像文件为PDF的我的内存使用超过4GB和CPU使用率为100%。转换完成后,全部恢复正常。但是由于我在一个应用程序的许多实例中使用这个特定的第三方,它会导致巨大的内存损失。Magick.NET C# - 巨大的内存使用率

行上存在问题images.Write(newPdfPath);

using (MagickImageCollection images = new MagickImageCollection()) 
     { 
      images.Read(orginalImage); 

      images.Write(newPdfPath); 
     } 

的图像是不同的大小,并且它确实没有多大关系,将大小7 KB的问题同样存在JPG时。

请帮忙!!!!

+1

图像有多大?也许[这](http://stackoverflow.com/questions/34737302/memory-consumption-in-magick-net)可以给你一个解释。 –

+0

我们怎么能帮助这么少的信息? – TaW

+0

发布您正在处理图像的代码。 – raven

回答

1

cpu和内存分配与硬盘上的映像大小无关。它完全与您拥有的像素数量有关。如果您拥有20000像素,20000像素的完全白色图像,则该硬盘驱动器上该文件的大小可能为6MG,但当您使用Magick.net将其加载到内存时,它将是千兆字节。所以首先你必须看看图像的大小(以像素为单位),然后我们可以判断性能。 然后,您可以使用这些方法来提高性能:

将图像加载到内存后,您可以用.mpc格式将其写入HDD,然后可以非常快地将其加载到内存中。 (如果你需要加载几次,你的图像)

使用Magikc.net Q8代替Q16

,如果你能在一个并行循环运行命令,然后Magick.net版本7可以更快地运行了近4倍。

而另一个答案是说你必须处理完成后的图像。

0

如果您在一个循环中转换图像,然后在转换完成后处理每个图像,这可能会有所帮助。使用

Image.Dispose(); 

方法为了释放图像使用的非托管内存资源。

+0

'images'不需要处置。 ''''''''''变量在'using'语句中声明,它会在'using'语句的末尾调用Dispose。 –

+0

请问,调用Dispose(),但这并不意味着它会在那个时候处置。 – BrightShadow