在asp.net app中重用imagemagick流程实例

时间:2009-10-19 09:57:03

标签: c#

好吧,在asp.net应用程序中创建缩略图似乎比我想象的更痛苦。

我第一次使用System.Drawing的东西,但后来我不满意我必须编写的代码量只是为了在固定的画布上做一些简单的调整,然后我读到微软有争议的讨论警告System.Drawing可能会或可能不会在asp.net Web上下文中工作,最后Bitmap操作的性能相当糟糕。

所以我切换到Imagemagick(IM)以生成缩略图。这实际上非常有效,因为我在PHP中使用IM并创建新的System.Diagnostics.Process是一个简单的操作。

但是,当我需要在一个请求(30或更多)中生成许多拇指时,CPU使用量会通过屋顶(100%)并保持不变直到创建最后一个拇指。当然,图像一旦被写入就会被缓存但仍然 - 这让我担心,因为服务器上有其他应用程序,当创建一些未缓存的拇指时,它们不应该永远挂起。

如果您不熟悉Imagemagick,以下是我如何使用它的示例:

/path/to/im/convert.exe large.jpg ...some options... small.png

因此,对于每个图像,我创建了新的convert.exe实例(通过新的System.Diagnostics.Process),这就是可能在服务器上放置如此多的CPU负载。有没有更好的方法来做到这一点?从Imagemagick切换到另一个图像创建解决方案不是一种选择。

PS:是的,这是我上一个问题imagemagick in asp.net via command line的后续内容,我说我会使用缓存解决方案,但是在处理大量数据时我注意到的高CPU使用率似乎可能有问题。

1 个答案:

答案 0 :(得分:0)

只要您知道在第一次转换开始之前需要转换的所有图片,您就可以使用类似

的内容
convert.exe ( first_image.jpg ...some options... -write first_image_small.png +delete ) ( ... second image ... ) last_image ... options ... last_image_small.png

这样您就不必为要转换的每个图像创建新进程。

如果您担心一次图像转换占用过多的CPU时间,您可能还想更改imagemagick进程的优先级,以便只有请求转换图像的用户才会受到转换的影响