第三方组装加载缓慢

时间:2012-02-06 19:43:27

标签: c# performance abcpdf

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

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

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

提前致谢。

3 个答案:

答案 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

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