現象
コンピューターが Microsoft .NET Framework 4.6 にアップグレードされているとします。 Windows Communication Framework (WCF) を使用して XML SOAP メッセージを送信するアプリケーションを使用する場合、エンコードに若干時間がかかることがあります。 場合によっては、サーバー アプリケーションが要求を処理する速度に影響する可能性があります。
原因
この問題は、RyuJIT という名前の新しい Just-In-Time (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 のアプリケーション互換性」を参照してください。