Problema de rendimiento al usar WCF para enviar mensajes XML SOAP en .NET Framework 4.6

Se aplica a
.NET Framework 4.6.2

Síntomas

Supongamos que ha actualizado a Microsoft .NET Framework 4.6 en el equipo. Cuando usa una aplicación que usa Windows Communication Framework (WCF) para enviar mensajes SOAP XML, la codificación puede tardar un poco más. En algunos casos, esto podría afectar a la velocidad a la que una aplicación de servidor puede procesar solicitudes.

Causa

Este problema se produce debido a un nuevo compilador Just-In-Time (JIT) denominado RyuJIT. Este compilador utiliza optimizaciones diferentes a las del compilador JIT64 heredado. Un método en una ruta de código caliente para codificar cadenas en XmlDictionaryWriter no está optimizado para el nuevo compilador JIT y las instrucciones nativas generadas se ejecutan más lentamente y la codificación tarda más. Cuando un mensaje SOAP contiene un gran número de cadenas que deben codificarse, este código más lento se utiliza con más frecuencia y puede afectar al tiempo de codificación.

Resolución

Para solucionar este problema, configure la aplicación para deshabilitar el uso de ngen para el ensamblado System.Runtime.Serialization.dll y para usar el motor JIT heredado. Para ello, utilice uno de los métodos siguientes:

  • Establezca las siguientes variables de entorno:

    COMPLUS_useLegacyJit=1
    COMPLUS_DisableNativeImageLoadList=System.Runtime.Serialization

  • En el Registro, cree cualquiera de las siguientes subclaves:

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

    A continuación, agregue los siguientes valores:

    • Nombre clave: useLegacyJit
      Tipo: REG_WORD
      Valor: 1
    • Nombre de clave: DisableNativeImageLoadList
      Tipo: REG_SZ
      Valor: System.Runtime.Serialization
  • Agregue el texto siguiente al <archivo app>.exe.config. Cree las secciones indicadas si aún no existen.<de instalación.>
              <del contenedor>
                   <useLegacyJit enabled="1">
                  <disableNativeImageLoad>
                      <assemblyIdentity name="System.Runtime.Serialization" />
                  </disableNativeImageLoad>
               </runtime>
          </configuración>

        
Para obtener más información acerca de los problemas conocidos de .NET Framework 4.6, consulte Problemas conocidos de .NET Framework 4.6 .

Más información

Para obtener más información acerca de los cambios en el control de versiones de productos y sus efectos en .NET Framework 4.6, consulte Compatibilidad de aplicaciones en .NET Framework 4.6.