我有一个命令行进程,使用ABCpdf从HTML文件创建PDF文件。我正在尝试从v5(非常旧,不再支持)升级到v8但是在安装ABCpdf 8并更新我的应用程序以使用新的DLL之后,我注意到过去需要不到一秒的转换过程现在需要20多秒。
我在代码中添加了一些跟踪调用,看起来程序试图从ABCpdf 8 DLL引用一个对象的位置就是暂停一段时间的事情。一旦代码超过该点,它就会以前所未有的速度运行。
我的问题是:在尝试引用第三方库时,什么可能导致CLR放慢速度?我已经验证了ABCpdf 8 DLL在GAC中以及与可执行文件相同的目录。
提前致谢。
答案 0 :(得分:5)
在一个肢体上,让我猜:
您在没有(传出)互联网连接的服务器上运行此功能。
该组件具有强名称,并使用加密密钥进行签名。正在检查证书(检查撤销列表是否证书仍然有效且可信)。由于缺乏互联网连接而超时。
如果要确认这一点,请附加调试器(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 Hang: Authenticode signed assemblies:
哦,那个页面没有(明确地)链接到解决方案:
答案 1 :(得分:3)
如果是密码问题,可以使用followng app.config条目解决问题。 但是afaik这只是一个问题,如果计算机有dns,但没有其他可用的互联网连接(防火墙)。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<runtime>
<generatePublisherEvidence enabled="false"/>
</runtime>
</runtime>
</configuration>
答案 2 :(得分:0)
我有一个非常类似的问题,当使用Gecko引擎时,创建第一个PDF需要45秒。一旦开始就没关系。
问题是由于我们的prod服务器没有传出连接而引起的。要修复它,可以更改组策略设置以将超时设置为1秒。参见:
http://technet.microsoft.com/en-us/library/cc753863.aspx
有关如何执行此操作的步骤。