我已指定将各个PDF页面转换为JPEG格式的任务。
使用Magick.NET,我在运行项目的任何本地计算机上都能获得非常不错的转换速度。
我的实时环境在Amazon的Elastic Beanstalk下,使用EC2实例。它是一个t1.micro实例,具有615MB RAM和~1.83GHz的CPU。
部署项目后,我在计算机和服务器上都使用Magick.NET x86 Q16
,Ghostscript x86
和Visual C++ Redistributable VS2012 x86
。
代码从S3 Bucket
下载PDF并在本地保存,因此转换也在本地进行。
这是它开始变得奇怪的地方。
测试转换#1的时间(我还有一个RDP窗口打开服务器进行监控):
Split to images
按钮image.Read()
,其中读取PDF需要很长时间才能完成(有时在2-8分钟之间),每次我的浏览器都会以空白(白色)页面进行响应。测试转换#2:
测试转换#3 /#4:
同样的事情。
在每次转换期间,CPU为100%,内存为70%
我的代码如下:
Dim response As GetObjectResponse = client.GetObject(req)
Try
Using response
Dim dest As String = Path.Combine(Server.MapPath("~/S3"), EnvName)
If Not File.Exists(dest) Then
response.WriteResponseStreamToFile(dest)
End If
End Using
Dim settings As New MagickReadSettings
settings.Density = New MagickGeometry(300, 300)
Dim images As New MagickImageCollection
Using images
images.Read(Server.MapPath("~/S3/" & EnvName & ""), settings)
Dim pageCount As Integer = 1
For Each img As MagickImage In images
img.Resize(700, 900)
img.Format = MagickFormat.Jpeg
img.Trim()
img.Write("~/S3/" & EnvName & "_Page_" & pageCount & ".jpeg")
Literal1.Text &= "Page " & pageCount & " is done" 'For debugging purposes
pageCount += 1
Next
Literal1.Text &= "Success"
End Using
Catch ex As Exception
Literal1.Text = ex.ToString
End Try
答案 0 :(得分:3)
T1微型实例是你在沃尔玛(几乎)购买的极低端笔记本电脑的等效功能 - 并不是说它们对很多东西都不是很有用,但是在Windows中使用高功率,CPU密集型处理环境不是其中之一。
最简单的事情是启动一个更合适的大小实例,看看你的问题是否神奇地消失了。
答案 1 :(得分:0)
您可能希望切换到使用Windows附带的新PDF API。可靠,快速。
http://msdn.microsoft.com/en-US/library/windows/apps/windows.data.pdf.aspx