【发布时间】:2011-10-30 19:38:29
【问题描述】:
我有一个大型(6 页,222 个字段)可填写的 PDF,我将其用作 iTextSharp PdfReader 的模板。当此对象实例化时,需要 5 分钟或更长时间。我试过了:
string pdfPath = Path.Combine(context.Server.MapPath("~/apps/ssgenpdf/App_Data"), "07-2011 Worksheets.pdf");
reader = new PdfReader(pdfPath);
或者,我尝试将文件读入内存流并将内存流传递给 PdfReader 构造函数。另外我尝试过使用:
reader = new PdfReader(new RandomAccessFileOrArray(pdfPath), null);
这些替代方案都没有显示出显着的收益。
这是一个 ASP.Net 应用程序,因此我的临时解决方案是在应用程序启动时创建并缓存读取器,然后检查是否从缓存中获取有效读取器并从中实例化新读取器读者。现在我经常看到这种方法的响应时间不到 50 毫秒。
我担心的是,如果我小组中的其他人想要使用这种“可填充的 PDF 作为带有 iTextSharp 的模板”策略,这似乎无法扩展。有没有人对平衡性能和可扩展性的替代策略有任何建议?
【问题讨论】:
-
跟进此问题。此后,我在其他环境中进行了进一步的测试。我在我的工作站上创建了一个控制台应用程序来完成基本相同的任务,而这一切都花了不到一秒钟的时间。然后我找到了另一台网络服务器来安装它,它也可以在一秒钟内运行。两台 Web 服务器都是 Win2K3。
-
如果是这样,我猜这是服务器(负载/其他)问题。验证这一点的任何简单方法是在问题 Web 服务器上创建一个简单的测试页面,该页面使用一个小的常规(无表单字段)PDF 文件实例化 PdfReader,并查看需要多长时间。
标签: c# asp.net pdf itextsharp