Leistungsproblem bei Verwendung von WCF zum Senden von XML-SOAP-Nachrichten in .NET Framework 4.6

Gilt für
.NET Framework 4.6.2

Symptome

Angenommen, Sie haben auf Ihrem Computer ein Upgrade auf Microsoft .NET Framework 4.6 durchgeführt. Wenn Sie eine Anwendung verwenden, die Windows Communication Framework (WCF) zum Senden von XML-SOAP-Nachrichten verwendet, kann die Codierung etwas länger dauern. In einigen Fällen kann sich dies auf die Geschwindigkeit auswirken, mit der eine Serveranwendung Anforderungen verarbeiten kann.

Ursache

Dieses Problem tritt aufgrund eines neuen JIT-Compilers (Just-In-Time) mit dem Namen RyuJIT auf. Dieser Compiler verwendet andere Optimierungen als der ältere JIT64-Compiler. Eine Methode auf einem Hot-Code-Pfad zum Codieren von Zeichenfolgen im XmlDictionaryWriter ist nicht für den neuen JIT-Compiler optimiert, und die generierten nativen Anweisungen laufen langsamer und die Codierung dauert länger. Wenn eine SOAP-Nachricht eine große Anzahl von Zeichenfolgen enthält, die codiert werden müssen, wird dieser langsamere Code häufiger verwendet und kann sich auf die Codierungszeit auswirken.

Lösung

Um dieses Problem zu umgehen, konfigurieren Sie die Anwendung so, dass die Verwendung von ngen für die System.Runtime.Serialization.dll Assembly deaktiviert und das ältere JIT-Modul verwendet wird. Wenden Sie hierzu eine der folgenden Methoden an:

  • Legen Sie die folgenden Umgebungsvariablen fest:

    COMPLUS_useLegacyJit=1
    COMPLUS_DisableNativeImageLoadList=System.Runtime.Serialization

  • Erstellen Sie in der Registrierung einen der folgenden Unterschlüssel:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework
    HKEY_CURRENT_USER\SOFTWARE\Microsoft\.NETFramework

    Fügen Sie dann die folgenden Werte hinzu:

    • Schlüsselname: useLegacyJit
      Typ: REG_WORD
      Wert: 1
    • Schlüsselname: DisableNativeImageLoadList
      Type: REG_SZ
      Wert: System.Runtime.Serialization
  • Fügen Sie der <Datei app>.exe.config den folgenden Text hinzu. Erstellen Sie die angegebenen Abschnitte, falls sie noch nicht vorhanden sind.<Konfiguration>
              <Laufzeit>
                   <useLegacyJit enabled="1">
                  <disableNativeImageLoad>
                      <assemblyIdentity name="System.Runtime.Serialization" />
                  </disableNativeImageLoad>
               </runtime>
          </Konfiguration>

        
Weitere Informationen zu bekannten Problemen in .NET Framework 4.6 finden Sie unter Bekannte Probleme mit .NET Framework 4.6 .

Weitere Informationen

Weitere Informationen zu den Änderungen bei der Produktversionsverwaltung und deren Auswirkungen in .NET Framework 4.6 finden Sie unter Anwendungskompatibilität in .NET Framework 4.6.