Сторонняя сборка медленно загружается - PullRequest
8 голосов
/ 06 февраля 2012

У меня есть процесс командной строки, который создает файл PDF из файла HTML с использованием ABCpdf.Я пытаюсь обновить v5 (очень старый, больше не поддерживается) до v8, но после установки ABCpdf 8 и обновления моего приложения для использования новой библиотеки DLL, я заметил, что процесс преобразования раньше занимал менее секундытеперь занимает 20+ секунд.

Я добавил несколько трассировочных вызовов в коде, и кажется, что точка, в которой программа пытается ссылаться на объект из библиотеки ABCpdf 8, - это то, где все долго останавливается,Как только код преодолевает эту точку, он запускается так же быстро, как и раньше.

У меня возникает вопрос: что может заставить CLR так сильно замедляться при попытке обратиться к сторонней библиотеке?Я проверил, что DLL-библиотека ABCpdf 8 находится в GAC, а также в том же каталоге, что и исполняемый файл.

Заранее спасибо.

Ответы [ 3 ]

5 голосов
/ 06 февраля 2012

На конечности, позвольте мне угадать:

Вы выполняете это на сервере без (исходящего) подключения к Интернету.

Компонент имеет строгое имя и подписан криптографическим ключом. Сертификат проверяется (список отзыва проверяется, является ли сертификат действительным и надежным). Это из-за отсутствия подключения к интернету.

Если вы хотите подтвердить это, присоедините отладчик (WinDbg?) И подтвердите следующую трассировку стека в любом из потоков:

0e82c1b4 7c822124 ntdll!KiFastSystemCallRet
0e82c1b8 77e6bad8 ntdll!NtWaitForSingleObject+0xc
0e82c228 73ca64ec kernel32!WaitForSingleObjectEx+0xac
0e82c254 73ca6742 cryptnet!CryptRetrieveObjectByUrlWithTimeout+0x12f

Был выпуск пакета обновления для серверных выпусков Windows, который сломал его, по умолчанию включив проверку. Вы можете отключить его, используя настройки реестра.

См. Зависание ASP.NET: подписанные сборки с проверочным кодом :

О, эта страница не имела (явно) ссылки на решение:

3 голосов
/ 07 февраля 2012

Если это криптографическая проблема, вы можете решить ее, используя следующую запись app.config. Но afaik это только проблема, если на компьютере есть днс, но нет другого доступного интернет-соединения (брандмауэр).

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
  <runtime>
    <generatePublisherEvidence enabled="false"/>
  </runtime>
</runtime>  
</configuration>
0 голосов
/ 20 марта 2014

У меня была очень похожая проблема: при использовании движка Gecko создание первого PDF-файла заняло бы 45 секунд. После начала все было в порядке.

Проблема была вызвана тем, что наш прод-сервер не имел исходящего соединения. Чтобы исправить это, есть параметр групповой политики, который можно изменить, чтобы установить время ожидания в 1 секунду. См:

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

о том, как это сделать.

...