مشكلة الأداء عند استخدام WCF لإرسال رسائل XML SOAP في .NET Framework 4.6

ينطبق على
.NET Framework 4.6.2

الأعراض

لنفترض أنك قمت بالترقية إلى Microsoft .NET Framework 4.6 على جهاز الكمبيوتر الخاص بك. عند استخدام تطبيق يستخدم إطار عمل اتصالات Windows (WCF) لإرسال رسائل XML SOAP، قد يستغرق الترميز وقتا أطول قليلا. في بعض الحالات، قد يؤثر ذلك على معدل معالجة طلبات تطبيق الخادم.

السبب

تحدث هذه المشكلة بسبب برنامج برمجي جديد ل Just-In-Time (JIT) يسمى RyuJIT. يستخدم هذا المترجم تحسينات مختلفة عن المترجم 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
  • قم بإضافة النص التالي إلى <ملف app>.exe.config. إنشاء المقاطع المشار إليها إذا لم تكن موجودة بالفعل.<التكوين>
              <وقت التشغيل>
                   <useLegacyJit enabled="1">
                  <disableNativeImageLoad>
                      <assemblyIdentity name="System.Runtime.Serialization" />
                  </disableNativeImageLoad>
               </وقت التشغيل>
          </configuration>

        
لمزيد من المعلومات حول المشكلات المعروفة في .NET Framework 4.6، راجع المشكلات المعروفة ل .NET Framework 4.6.

المزيد من المعلومات

لمزيد من المعلومات حول تغييرات إصدار المنتج وتأثيراتها في .NET Framework 4.6، راجع توافق التطبيق في .NET Framework 4.6.