c# - 第 3 方程序集加载缓慢

标签 c# performance abcpdf

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

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

我的问题是:什么会导致 CLR 在尝试引用第 3 方库时速度如此之慢?我已验证 ABCpdf 8 DLL 位于 GAC 中,并且与可执行文件位于同一目录中。

提前致谢。

最佳答案

我猜猜:

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

该组件具有强名称并使用加密 key 签名。正在检查证书(检查吊销列表是否证书仍然有效和可信)。由于没有互联网连接而超时。

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

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

关于c# - 第 3 方程序集加载缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9166192/

相关文章:

c# - 如何通过 abcpdf 获取嵌入和引用字体的列表?

c# - 使用ABCPDF在内存中生成文档,而不是保存在物理驱动器上

c# - 如何以编程方式从 View 模型中选择 ListView 项?

c# - 在 CefSharp 中使用本地构建的网页

c# - ASP.NET MVC 3 Razor DisplayFor Delegate

javascript - ace javascript 编辑器多个实例

performance - Fortran:32 位/64 位性能可移植性

c# - .NET Regex - 一次替换多个字符而不覆盖?

c - Fortran 与 C : Mandelbrot benchmark

css - ABCPdf 没有嵌入新添加的自定义字体