Frage

begegnete ich ein seltsames Problem in dieser Woche, die ich nicht erklären kann: Ich wechselte meine Anwendung die signierte Version von einigen Dritten Baugruppen (Xceed Grid und einige ihrer anderen Komponenten) und die Anwendung zu verwenden, um Zeit ging in die Toilette beginnen . Jedes Mal, wenn die Anwendung eine signierte Assembly geladen, dauerte es 30 Sekunden zu laden. Anwendungsstart ging von 5 Sekunden bis über 90 Sekunden. Was zum Teufel ist hier los?!

Einige andere Info:

  • Dies ist eine WinForms-Anwendung unter .NET 3.5 SP1 ausgeführt wird.
  • Der Computer hatte keine Internetverbindung (zum Zweck, für die Sicherheit).
War es hilfreich?

Lösung

Haben Sie einen Blick auf diese Links gilt:

Sie könnten helfen. Es könnte sein, dass die Config auf Ihrem System bedeutet, dass das .NET Framework eine Menge zusätzlicher Arbeit tut, um die Montage zu überprüfen. Wenn dies der Fall ist, dann können Sie konfigurieren es nicht so wählerisch sein.

Andere Tipps

Jason Evans' Post hat die Antwort enthalten, sondern in Form eines Links. Ich dachte, es wäre gut, die aktuelle Lösung posten hier:

Erstellen Sie eine Datei Appname.exe.config im selben Ordner wie die ausführbare Datei (wo Appname der Name Ihres ausführbar ist, für die Entwicklung, das im Debug-Ausgabeordner sein würde). Dies zeigt eine XML-Datei, die Sie haben keine anderen Einträge in der Hauptkonfigurationsdatei an; Wenn Sie die Datei bereits haben, gehe ich davon aus Sie würde nur die neuen Abschnitte / Text wie nötig hinzuzufügen:

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

Just incase jemand über dieses Thema kommt, habe ich das Problem verfolgt ein wenig weiter, weil ich gerade versuchte, es herauszufinden und fand diese Seite.

Es scheint, dass die CRL jedes Mal überprüfen Sie Ihren Prozess ausgeführt werden, wenn die vorhandene CRL, die auf Ihrem Computer ist abgelaufen, und noch nicht mit einem neuen aktualisiert. Sie können dies testen, indem Sie die CRL unter http://crl.microsoft.com/ pki / crl / products / CodeSignPCA.crl und prüfen Sie das Ablaufdatum. Konfigurieren Sie nun einen Proxy im IE, die nicht funktioniert. Stellen Sie Ihre Maschine Datum das Haltbarkeitsdatum überschritten und erneut testen Ihre Anwendung.

Wenn Ihre NIC deaktiviert ist, wird die CRL nicht überprüft.

Wenn Ihr NIC kein Gateway hat, wird die CRL nicht überprüft.

Wenn Sie einen Proxy aktiviert und ein Gateway dann wird die CRL überprüft und wenn es ein Problem mit dem Proxy ist, dann wird diese Timeout erfahren.

Wenn Sie eine Verbindung zum Internet erfolgreich dann das CRL-Updates und Sie werden für den Augenblick in Ordnung sein.

Meine Anwendung einiger älteren Xceed Komponenten in .NET 2.0 wurde mit und arbeitet seit immer so dauerte es eine Weile, um herauszufinden, was los war.

Laden unterzeichnet Baugruppen werden auf jeden Fall langsamer als nicht-signierte Pendants, weil Signatur überprüft werden muss, aber dies sollte völlig vernachlässigbar sein.

Der Übergang von 5 Sekunden bis 90 Sekunden ?? Ich glaube, Sie brauchen den Montag Autor und bitten, sie zu kontaktieren, wenn sie nur die Unterschrift geändert: -)

Ich würde vermuten, dass Sie die Sicherheitseinstellungen in einer Weise festgelegt haben, so dass die Baugruppen-Zertifikate überprüft erhalten. So ist es wahrscheinlich auf das Web zuzugreifen versucht, einige Zertifikate zu überprüfen und wartet dann auf eine Timeout (30 s ist eine sehr typische Timeout-Nummer).

Sie können dies überprüfen, ob Sie schauen, was in die mit 30 Sekunden passiert. Für meine Vermutung wahr, dass es sein sollte Gebrauch wenig CPU und wenig HDD greift in diesen 90 Sekunden sein. Wenn Sie hohe CPU-Nutzung oder gebunden durch Ihre Festplatte haben, dann ist es etwas anderes.

BTW:. Eine andere Möglichkeit wäre es, wenn Ihre Festplatte voll ist und die Baugruppen sind stark fragmentiert (aber 90 Sekunden wäre mehr, als ich jemals in diesem Fall gehört)

Versuchen Sie Anwendung von Visual Studio startet mit "Step over". Dadurch wird der Code starten, indem Sie über jede App treten, so können Sie überprüfen, was so lange dauert. Ich hatte einmal diese, und es stellte sich heraus, dass mein SQL Server war wirklich vermasselt.

Ein weiterer Weg, um herauszufinden, warum es so lange dauert, ist Haltepunkt durch den Ladecode verstreut zu platzieren und sehen, was der Engpass ist. Wenn die Anwendung dauert 90 Sekunden vor es Ihre zunächst wie, wahrscheinlich etwas mit Xceed oder die signierten Baugruppen geladen werden.

Btw, ich bin bewusst, es gibt bessere Möglichkeiten, um Ihre Anwendung zu profilieren, aber die schnelle ‚n schmutzige Art und Weise funktioniert recht nett und effizient solche Probleme zu debuggen

Vielleicht sind die unterzeichneten Baugruppen sind nicht NGEN'd, während die unsigned diejenigen sind.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top