第三方组装加载缓慢

Alp*_*ilo 8 c# performance abcpdf

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

我在代码中添加了一些跟踪调用,看起来程序试图从ABCpdf 8 DLL引用一个对象的位置是事情暂停很长时间.一旦代码超过该点,它就会以前所未有的速度运行.

我的问题是:在尝试引用第三方库时,什么可能导致CLR放慢速度?我已经验证了ABCpdf 8 DLL在GAC中以及与可执行文件相同的目录.

提前致谢.

seh*_*ehe 5

我想你可以猜到:

您在没有(传出)Internet连接的服务器上运行此功能.

该组件具有强名称,并使用加密密钥进行签名.正在检查证书(检查撤销列表是否证书仍然有效且可信).由于缺乏互联网连接而超时.

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

0e82c1b4 7c822124 ntdll!KiFastSystemCallRet
0e82c1b8 77e6bad8 ntdll!NtWaitForSingleObject+0xc
0e82c228 73ca64ec kernel32!WaitForSingleObjectEx+0xac
0e82c254 73ca6742 cryptnet!CryptRetrieveObjectByUrlWithTimeout+0x12f
Run Code Online (Sandbox Code Playgroud)

Windows服务器版本的Service Pack版本通过默认启用检查来解决此问题.您可以使用注册表设置禁用它.

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

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

  • 这似乎是个问题.我关闭了"Internet选项"中的"检查发布者证书撤销"高级选项以进行验证,问题就消失了.最终我们打开我们的防火墙足以让盒子打到crl.microsoft.com(撤销列表服务器),它应该纠正这个问题.或者我们可能会在下面的答案中使用代码来禁用此库,但还不确定.无论如何,感谢正确的方向. (2认同)