อาการ
สมมติว่า คุณได้ปรับรุ่นเป็น 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
-
-
เพิ่มข้อความต่อไปนี้ <โปรแกรมประยุกต์ > แฟ้ม exe.config สร้างส่วนที่ระบุไม่มีอยู่แล้ว<configuration> <runtime>
<useLegacyJit enabled="1">
<disableNativeImageLoad>
<assemblyIdentity name="System.Runtime.Serialization" />
</disableNativeImageLoad>
</runtime>
</configuration>
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับปัญหาที่ทราบใน 4.6 กรอบงาน.NET ดูการตัดสินค้าจากคลังสำหรับ 4.6 กรอบงาน.NET รู้จักกันในชื่อ
ข้อมูลเพิ่มเติม
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงการกำหนดรุ่นผลิตภัณฑ์และลักษณะพิเศษของพวกเขาใน 4.6 กรอบงาน.NET ดูความเข้ากันได้ของโปรแกรมประยุกต์ใน 4.6 กรอบงาน.NET