ประสิทธิภาพ System.Diagnostics.StackFrame ลดลงใน Windows 10

หากหลังจากที่คุณอัปเกรดเป็น Windows 10 หรือ.NET Framework 4.7.1และคุณสังเกตเห็นประสิทธิภาพการทำงานลดลงอย่างมากเมื่อคุณเรียกใช้ แอปพลิเคชัน .NET Framework ที่ใช้ คลาส System.Diagnostics.StackFrameโพสต์นี้อาจสนใจคุณ เราจะพิจารณาสาเหตุ แล้วเสนอการแก้ไขข้อผิดพลาดที่ทราบ

System.Diagnostics.StackFrame ประสิทธิภาพลดลง

System.Diagnostics.StackFrame ประสิทธิภาพลดลง

แอปพลิเคชันที่มีประสิทธิภาพการทำงานที่ยอมรับได้ที่ทำงานบน.NET Framework 4.7หรือเวอร์ชันก่อนหน้าทำงานช้ากว่าเมื่อทำงานบน. NET Framework 4.7.1 แอปพลิเคชันมักใช้ StackFrame เมื่อมีข้อยกเว้น .NET หากสิ่งนี้เกิดขึ้นในอัตราที่สูง (มากกว่า 10 เหตุการณ์ต่อวินาที) แอปพลิเคชันอาจช้าลงอย่างมาก (สิบเท่า) และทำงานช้ากว่าเมื่อก่อนอย่างเห็นได้ชัด

สาเหตุของประสิทธิภาพของ System.Diagnostics.StackFrame ลดลง(Cause of the System.Diagnostics.StackFrame performance degrade)

.NET Framework 4.7.1ในWindows 10 เพิ่ม การรองรับสำหรับการตรวจจับและแยกวิเคราะห์รูปแบบไฟล์ Portable PDBเพื่อแสดงข้อมูลไฟล์และหมายเลขบรรทัดในสแต็กเทรซ ส่วนหนึ่งของการเปลี่ยนแปลงนี้ แต่ละฟังก์ชันในการติดตามสแต็กจะมีการตรวจสอบโมดูลที่กำหนดเพื่อตรวจสอบว่าโมดูลนั้นใช้รูปแบบ Portable PDB หรือไม่ (PDB)เนื่องจาก(Due)ความแตกต่างบางประการในนโยบายการแคชภายใน รันไทม์จึงใช้เวลาค้นหาPortable PDB(Portable PDBs)มากกว่า .NET Frameworkเวอร์ชันก่อนหน้าที่ใช้ค้นหาWindows PDB(Windows PDBs) แบบคลาสสิ ก

ซึ่งทำให้การสืบค้นกลับสแต็กที่จัดรูปแบบช้ากว่าเมื่อก่อน

ปัญหานี้ไม่ได้เปลี่ยนจำนวนของข้อยกเว้นที่เกิดขึ้น อย่างไรก็ตาม จะลดความสามารถของแอปพลิเคชันในการจัดการข้อยกเว้นเหล่านั้นลงอย่างมาก

แอปพลิเคชันที่ใช้ ไลบรารี IKVMจะได้รับผลกระทบจากปัญหานี้หากตรวจสอบหาแอสเซมบลี การตรวจสอบสำหรับแอสเซมบลีเป็นที่ทราบกันว่าทำให้เกิดข้อยกเว้น

แก้ไขปัญหาประสิทธิภาพของ System.Diagnostics.StackFrame(Fix System.Diagnostics.StackFrame)ลดลง

เพื่อแก้ไขปัญหานี้Microsoftแนะนำให้ใช้วิธีใดวิธีหนึ่งต่อไปนี้

1] ใช้ตัวสร้างอื่นสำหรับ StackFrame ที่ใช้อาร์กิวเมนต์บูลีน(1] Use a different constructor for StackFrame that takes a Boolean argument)

นี่เป็นวิธีแก้ปัญหาที่ต้องการ

หากนักพัฒนาแอปพลิเคชันสามารถเปลี่ยนแปลงแอปพลิเคชันของตนได้ ให้เรียก(call the) System.Diagnostics.StackTrace #ctor( บูลีน(Boolean) ) ตัวสร้างโดยใช้อาร์กิวเมนต์เท็จเพื่อหลีกเลี่ยงการรวบรวมข้อมูลต้นฉบับ ซึ่งจะหลีกเลี่ยงส่วนของโค้ดที่ประสิทธิภาพลดลง

2] ย้อนกลับหรืออัปเกรดเป็น Windows 10 เวอร์ชันล่าสุด(2]  Rollback or upgrade to the latest Windows 10 version)

ในวิธีนี้ ให้ย้อนกลับไปเป็นเวอร์ชันก่อนหน้า/บิ วด์ หรือupgrade to the latest version/build ด์  ของWindows 10 หากคุณประสบปัญหานี้และคุณไม่ได้ใช้ (Windows 10)Windows 10เวอร์ชันล่าสุด นอกจากนี้ถอนการติดตั้ง .NET Framework 4.7.1หากมี จากคอมพิวเตอร์ของคุณ จากนั้นดาวน์โหลด และติดตั้งเวอร์ชันก่อนหน้าหรือ (download).NET Frameworkเวอร์ชันล่าสุด

Hope this helps!



About the author

ฉันเป็นผู้เชี่ยวชาญด้านการสนับสนุนลูกค้า windows 10/11/10 ที่มีประสบการณ์มากกว่า 5 ปี ฉันยังเป็นนักเล่นเกมตัวยงในช่วงไม่กี่ปีที่ผ่านมาและมีความสนใจอย่างมากใน xbox One จุดสนใจปัจจุบันของฉันคือการช่วยเหลือลูกค้าเกี่ยวกับปัญหาที่เกิดขึ้นกับระบบ windows 10 หรือ Windows 11 บ่อยครั้งผ่านการใช้เครื่องมือบริการลูกค้าของเรา เช่น การสนับสนุนคอลเซ็นเตอร์และความช่วยเหลือออนไลน์



Related posts