Ich habe einen Befehlszeilenprozess, der mithilfe von ABCpdf eine PDF-Datei aus einer HTML-Datei erstellt. Ich versuche, von v5 (sehr alt, nicht mehr unterstützt) auf v8 zu aktualisieren, aber nachdem ich ABCpdf 8 installiert und meine Anwendung aktualisiert habe, um die neue DLL zu verwenden, habe ich bemerkt, dass der Prozess weniger als eine Sekunde dauerte dauert jetzt 20+ Sekunden.
Ich habe einige Trace-Aufrufe im Code hinzugefügt und es scheint, dass der Punkt, an dem das Programm versucht, ein Objekt aus der ABCpdf 8 DLL zu referenzieren, dort ist, wo die Dinge für eine lange Zeit anhalten. Sobald der Code an diesem Punkt vorbeikommt, läuft er so schnell wie immer.
Die Frage, die ich habe, ist: Was könnte die CLR verlangsamen, wenn sie versucht, auf eine Bibliothek eines Drittanbieters zu verweisen? Ich habe überprüft, dass die DLL von ABCpdf 8 in der GAC sowie das gleiche Verzeichnis wie die ausführbare Datei ist.
Vielen Dank im Voraus.
Raus mit einem Glied, lass mich raten:
Sie führen dies auf einem Server ohne (ausgehende) Internetverbindung aus.
Die Komponente ist stark benannt und mit einem kryptografischen Schlüssel signiert. Das Zertifikat wird geprüft (die Sperrliste wird geprüft, ob das Zertifikat noch gültig und vertrauenswürdig ist). Dieses Zeitlimit aufgrund der Abwesenheit einer Internetverbindung.
Wenn Sie dies bestätigen möchten, hängen Sie einen Debugger (WinDbg?) an und bestätigen Sie den folgenden Stacktrace für einen der Threads:
%Vor%Es gab eine Service Pack-Version für Windows-Server-Editionen, die dies durchbrochen hat, indem die Prüfung standardmäßig aktiviert wurde. Sie können es mithilfe einer Registrierungseinstellung deaktivieren.
Siehe ASP.NET Hang : Authenticode signierte Baugruppen :
Oh, diese Seite hat nicht (klar) mit der Lösung verlinkt:
Ich hatte ein sehr ähnliches Problem, das bei Verwendung der Gecko-Engine 45 Sekunden dauerte, um das erste PDF zu erstellen. Einmal gestartet war es in Ordnung.
Das Problem wurde verursacht, weil unser Prod-Server keine ausgehende Verbindung hatte. Um es zu beheben, gibt es eine Gruppenrichtlinieneinstellung, die geändert werden kann, um das Zeitlimit auf 1 Sekunde festzulegen. Siehe:
für Schritte, wie man das macht.
Tags und Links c# performance abcpdf