Computer >> คอมพิวเตอร์ >  >> ระบบ >> Windows

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

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

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

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

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

สาเหตุของประสิทธิภาพของ System.Diagnostics.StackFrame ลดลง

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

ซึ่งจะทำให้สร้าง stack trace ที่จัดรูปแบบช้ากว่าที่เคย

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

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

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

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

1] ใช้ตัวสร้างอื่นสำหรับ StackFrame ที่ใช้อาร์กิวเมนต์บูลีน

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

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

2]  ย้อนกลับหรืออัปเกรดเป็น Windows 10 เวอร์ชันล่าสุด

ในวิธีนี้ ให้ย้อนกลับไปเป็นเวอร์ชันก่อนหน้า/บิวด์หรืออัปเกรดเป็นเวอร์ชันล่าสุด/บิวด์ของ Windows 10 หากคุณประสบปัญหานี้และคุณไม่ได้ใช้ Windows 10 เวอร์ชันล่าสุด ถอนการติดตั้ง .NET Framework 4.7 ด้วย .1 หากมี จากคอมพิวเตอร์ของคุณ จากนั้นดาวน์โหลดและติดตั้งเวอร์ชันก่อนหน้าหรือ .NET Framework เวอร์ชันล่าสุด

หวังว่านี่จะช่วยได้!

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