8

我有一个命令行进程,它使用 ABCpdf 从 HTML 文件创建 PDF 文件。我正在尝试从 v5(非常旧,不再受支持)升级到 v8,但是在安装 ABCpdf 8 并更新我的应用程序以使用新的 DLL 之后,我注意到过去需要不到一秒的时间来转换的过程现在需要 20 多秒。

我在代码中添加了一些跟踪调用,看起来程序尝试从 ABCpdf 8 DLL 引用对象的点是事情暂停很长时间的地方。一旦代码超过了这一点,它就会像以往一样快速运行。

我的问题是:在尝试引用 3rd 方库时,什么可能导致 CLR 如此缓慢?我已经验证了 ABCpdf 8 DLL 在 GAC 中以及与可执行文件相同的目录中。

提前致谢。

4

3 回答 3

5

在一个肢体上,让我猜猜:

您在没有(传出)互联网连接的服务器上运行它。

该组件是强命名的,并使用加密密钥进行签名。正在检查证书(检查吊销列表是否证书仍然有效和受信任)。由于没有 Internet 连接,此操作超时。

如果您想确认这一点,请附加一个调试器(WinDbg?)并在任何线程上确认以下堆栈跟踪:

0e82c1b4 7c822124 ntdll!KiFastSystemCallRet
0e82c1b8 77e6bad8 ntdll!NtWaitForSingleObject+0xc
0e82c228 73ca64ec kernel32!WaitForSingleObjectEx+0xac
0e82c254 73ca6742 cryptnet!CryptRetrieveObjectByUrlWithTimeout+0x12f

Windows 服务器版本的 Service Pack 版本通过默认启用检查来打破这一点。您可以使用注册表设置禁用它。

请参阅ASP.NET 挂起:Authenticode 签名程序集

哦,那个页面没有(清楚地)链接到解决方案:

于 2012-02-06T19:56:25.967 回答
3

如果是密码问题,可以使用 followng app.config 条目解决。但是,如果计算机有 dns,但没有其他可用的互联网连接(防火墙),这只是一个问题。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
  <generatePublisherEvidence enabled="false"/>
</runtime>  
</configuration>
于 2012-02-06T20:10:48.087 回答
0

我有一个非常相似的问题,当使用 Gecko 引擎时,创建第一个 PDF 需要 45 秒。一旦开始就没事了。

这个问题是因为我们的产品服务器没有传出连接而引起的。要修复它,可以更改组策略设置以将超时设置为 1 秒。看:

http://technet.microsoft.com/en-us/library/cc753863.aspx

有关如何执行此操作的步骤。

于 2014-03-19T22:54:42.310 回答