C# 在asp.net应用程序中重用imagemagick进程实例
在asp.net应用程序中创建缩略图似乎比我想象的更痛苦 我第一次使用System.Drawing的东西,但后来我对在固定画布上进行简单的大小调整所需编写的代码量感到不满意,然后我读到了有争议的讨论微软的警告系统。绘图可能在asp.net网络环境下工作,也可能不工作,最后位图操作的性能相当差 所以我切换到Imagemagick IM以生成缩略图。这实际上非常有效,因为我有在PHP中使用IM和创建新系统的经验。Diagnostics.Process是一个简单的操作 然而,当我需要在一个30或更多的请求中生成多个thumb时,CPU使用率将达到100%,并一直保持到创建最后一个thumb为止。当然,一旦写入图像,它们就会被缓存,但这仍然让我担心,因为服务器上还有其他应用程序,当创建一些未缓存的拇指时,它们不应该永远挂起 如果您不熟悉Imagemagick,以下是我如何使用它的示例:C# 在asp.net应用程序中重用imagemagick进程实例,c#,C#,在asp.net应用程序中创建缩略图似乎比我想象的更痛苦 我第一次使用System.Drawing的东西,但后来我对在固定画布上进行简单的大小调整所需编写的代码量感到不满意,然后我读到了有争议的讨论微软的警告系统。绘图可能在asp.net网络环境下工作,也可能不工作,最后位图操作的性能相当差 所以我切换到Imagemagick IM以生成缩略图。这实际上非常有效,因为我有在PHP中使用IM和创建新系统的经验。Diagnostics.Process是一个简单的操作 然而,当我需要在一个30或更多的
/path/to/im/convert.exe large.jpg ...some options... small.png
因此,对于每个映像,我通过新的System.Diagnostics.Process创建新的convert.exe实例,这可能会给服务器带来如此多的CPU负载。有没有更好的办法?从Imagemagick切换到其他图像创建解决方案不是一个选项
PS:是的,这是我上一个问题的后续问题,我说过我会使用缓存解决方案,但我注意到在处理大量数据时CPU使用率很高,这似乎是有问题的。只要您知道在第一次转换开始之前需要转换的所有图像,您可以使用
convert.exe ( first_image.jpg ...some options... -write first_image_small.png +delete ) ( ... second image ... ) last_image ... options ... last_image_small.png
这样,您就不必为每个要转换的图像创建新的进程
如果您担心一个图像转换占用太多cpu时间,您可能还需要更改imagemagick进程的优先级级别,以便只有请求需要转换的图像的用户才会受到转换的影响