第三方大会加载缓慢

问题描述 投票:8回答:3

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

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

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

提前感谢。

c# performance abcpdf
3个回答
5
投票

四肢冒失,让我猜:

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

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

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

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

哦,该页面没有(显然)链接到解决方案:


3
投票

如果是加密问题,则可以使用以下app.config条目来解决。但是,如果计算机具有dns,但没有其他可用的Internet连接(防火墙),则这仅是一个问题。

FIX: A .NET Framework 2.0 managed application that has an Authenticode signature takes longer than usual to start

0
投票

我有一个非常相似的问题,那就是在使用Gecko引擎时,创建第一个PDF需要45秒。一旦开始就可以了。

之所以引起此问题,是因为我们的产品服务器没有传出的连接。要解决此问题,可以更改组策略设置以将超时设置为1秒。参见:

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

有关执行此操作的步骤。

© www.soinside.com 2019 - 2024. All rights reserved.