【问题标题】:3rd Party assembly slow to load第 3 方程序集加载缓慢
【发布时间】:2012-02-06 19:43:27
【问题描述】:

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

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

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

提前致谢。

【问题讨论】:

  • 在此期间暂停调试器并查看调用堆栈。
  • 只有在附加Visual Studio(或其他调试器)时才慢吗?
  • 您的应用程序是 .NET 4 应用程序,而 DLL 是“.NET 2”吗?根据某些设置,.NET 4 的 CLR 可能需要加载 .NET 2 CLR(这是 .NET 4 中的新功能)?
  • 我还没有附加调试器。我遇到问题的机器上没有 Visual Studio(Web 服务器)。该应用程序应该运行 .NET 3.5,但我会仔细检查。
  • 使用 fuslogvwr.exe 查看 dll 是否加载其他 DLL。

标签: c# performance abcpdf


【解决方案1】:

让我猜一猜:

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

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

如果您想确认这一点,请附加一个调试器(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:

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

【讨论】:

  • 这似乎是问题所在。我关闭了 Internet 选项中的“检查发布者的证书吊销”高级选项以进行验证,问题就消失了。最终,我们将充分打开我们的防火墙,让该框点击 crl.microsoft.com(撤销列表服务器),这应该可以纠正未来的问题。或者我们可能会使用下面答案中的代码来禁用这个库,但还不确定。无论如何,感谢您指出正确的方向。
【解决方案2】:

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

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
  <generatePublisherEvidence enabled="false"/>
</runtime>  
</configuration>

【讨论】:

    【解决方案3】:

    我有一个非常相似的问题,当使用 Gecko 引擎时,创建第一个 PDF 需要 45 秒。启动后就OK了。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多