2012-02-06 3 views
8

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

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

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

Заранее благодарен.

+0

Приостановите отладчик в течение этого времени и посмотрите на стек вызовов. – SLaks

+0

Это слишком медленно, когда Visual Studio (или другой отладчик) подключен? –

+1

Является вашим приложением приложение .NET 4, а DLL - «.NET 2 "? В зависимости от некоторых настроек CLR .NET 4 может потребоваться загрузить .NET 2 CLR (это новая функция в .NET 4)? – Yahia

ответ

5

на конечности, дайте угадаю:

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

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

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

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

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

См ASP.NET Hang: Authenticode signed assemblies:

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

+2

Это, кажется, проблема. Я отключил расширенную опцию «Проверить для отзыва издателя» в «Свойствах Интернета», чтобы проверить, и проблема исчезла. В конечном счете мы собираемся открыть наш брандмауэр, чтобы позволить коробка привет t crl.microsoft.com (сервер списка аннулирования), который должен исправить проблему в будущем. Или, может быть, мы будем использовать код в ответе ниже, чтобы отключить его для этой библиотеки, но пока не уверен. Во всяком случае, спасибо за точку в правильном направлении. – AlphaKilo

3

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

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

Да, это настройка. – sehe

0

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

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

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

для шагов о том, как это сделать.

Смежные вопросы