症状
假设计算机上已升级到 Microsoft .NET Framework 4.6。 当您使用使用 Windows 通信框架 (WCF) 发送 XML SOAP 消息的应用程序时,编码可能需要稍长的时间。 在某些情况下,这可能会影响服务器应用程序处理请求的速率。
原因
出现此问题的原因是名为 RyuJIT 的新实时 (JIT) 编译器。 此编译器使用不同于旧版 JIT64 编译器的优化。 在 XmlDictionaryWriter 中用于编码字符串的热代码路径上的方法未针对新的 JIT 编译器进行优化,并且生成的本机指令运行速度变慢,编码时间更长。 当 SOAP 消息包含大量要编码的字符串时,会更频繁地使用此较慢的代码,并且可能会影响编码时间。
解决方法
要解决此问题,请将应用程序配置为禁止对 System.Runtime.Serialization.dll 程序集使用 ngen,并使用旧的 JIT 引擎。 为此,请使用下列方法之一:
设置以下环境变量:
COMPLUS_useLegacyJit=1
COMPLUS_DisableNativeImageLoadList=System.Runtime.Serialization在注册表中,创建以下子项之一:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework
HKEY_CURRENT_USER\SOFTWARE\Microsoft\.NETFramework然后,添加以下值:
- 项名称: useLegacyJit
类型:REG_WORD
值:1 - 项名称: DisableNativeImageLoadList
类型:REG_SZ
值:System.Runtime.Serialization
- 项名称: useLegacyJit
将以下文本 <添加到 app>.exe.config 文件中。 创建指示的部分(如果尚不存在)。<配置>
<运行时>
<useLegacyJit enabled=“1”>
<disableNativeImageLoad>
<assemblyIdentity name=“System.Runtime.Serialization” />
</disableNativeImageLoad>
</runtime>
</configuration>
有关 .NET Framework 4.6 中已知问题的更多信息,请参阅 .NET Framework 4.6 的已知问题。
详细信息
有关 .NET Framework 4.6 中的产品版本控制更改及其影响的详细信息,请参阅 .NET Framework 4.6 中的应用程序兼容性。