0

我已经分配了将单个 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

该代码从 下载 PDFS3 Bucket并将其保存在本地,因此转换也发生在本地。

这就是它开始变得奇怪的地方。

测试转换 #1 的时间(我还向服务器打开了一个 RDP 窗口进行监控):

  • 点击我漂亮闪亮的Split to images按钮
  • 下载几乎在瞬间完成
  • image.Read(),它读取 PDF 需要很长时间才能完成(有时在 2-8 分钟之间),并且每次,我的浏览器都会以空白(白色)页面响应。
  • 我将浏览器的白页保持原样,然后继续监视服务器。在发生转换的文件夹中,服务器缓慢地开始写入文件夹中的每个 60KB 图像(对于大小为 1.7MB 的 6 页 PDF,整个过程可能需要 5-15 分钟,服务器在那个时候以及稍晚一点)

测试转换#2:

  • 用 x64 版本替换了上面描述中提到的所有内容。一样。

测试转换#3/#4:

  • 将 Magick.NET x86/x64 Q16替换为 Magick.NET x86/x64 Q8

又是同样的事情。

在每次转换期间,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
4

2 回答 2

3

T1 微型实例与您在 walmart 购买的非常低端笔记本电脑的功能相当(几乎) - 并不是说​​它们对很多事情都不是很有用,但是在 Windows 环境中的高性能、cpu 密集型处理不是其中之一。

最简单的做法是启动一个大小更合适的实例,看看您的问题是否会神奇地消失。

于 2014-04-30T07:35:25.667 回答
0

您可能想要切换到使用 Windows 附带的新 PDF API。可靠且快速。

http://msdn.microsoft.com/en-US/library/windows/apps/windows.data.pdf.aspx

于 2014-04-30T06:45:53.920 回答