症状
假设您已在您的计算机上升级到 Microsoft.NET Framework 4.6。使用 Windows 的通信框架 (WCF) 发送 XML SOAP 消息的应用程序使用时,可能需要稍长的编码。在某些情况下,这可能会影响服务器应用程序处理请求的速度。
原因
名为 RyuJIT 的新实时 (JIT) 编译器会出现此问题。此编译器使用不同于传统的 JIT64 编译器的优化。热代码路径上编码XmlDictionaryWriter中的字符串的方法不适合新的 JIT 编译器生成的本机指令运行变慢和编码时间较长。当 SOAP 消息中包含大量的字符串进行编码时,此速度较慢的代码更频繁地使用,并可能会影响编码时间。
解决方案
要变通解决此问题,请配置为禁止使用 ngen System.Runtime.Serialization.dll 程序集并使用旧式的 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
-
-
将以下文本添加到 < 应用程序 >。.exe.config 文件。如果不存在,请创建相应章节。<configuration> <runtime>
<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 中应用程序兼容性。