यदि आप Windows 10 या .NET Framework 4.7.1 में अपग्रेड करने के बाद, और जब आप System.Diagnostics.StackFrame का उपयोग करने वाले .NET Framework अनुप्रयोग चलाते हैं, तो आपको प्रदर्शन में उल्लेखनीय कमी दिखाई देती है। कक्षा, तो यह पोस्ट आपको रूचि दे सकती है। हम कारण देखेंगे, और फिर त्रुटि के लिए ज्ञात समाधान प्रदान करेंगे।
System.Diagnostics.StackFrame प्रदर्शन में गिरावट
.NET Framework 4.7 या पुराने संस्करणों पर चलने वाले स्वीकार्य प्रदर्शन वाला कोई अनुप्रयोग .NET Framework 4.7.1 पर चलते समय अधिक धीरे-धीरे निष्पादित होता है। अनुप्रयोग आमतौर पर StackFrame पर भरोसा करते हैं जब वे .NET अपवाद फेंकते हैं। यदि यह उच्च दर (प्रति सेकंड 10 से अधिक घटनाएं) पर होता है, तो एप्लिकेशन काफी (दस गुना) धीमा हो सकते हैं और पहले की तुलना में काफी धीमी गति से चल सकते हैं।
System.Diagnostics.StackFrame के प्रदर्शन में गिरावट का कारण
विंडोज 10 में .NET फ्रेमवर्क 4.7.1 ने स्टैक ट्रेस में फाइल और लाइन नंबर की जानकारी दिखाने के लिए पोर्टेबल पीडीबी फाइल फॉर्मेट का पता लगाने और पार्स करने के लिए समर्थन जोड़ा। इस परिवर्तन के भाग के रूप में, स्टैक ट्रेस में प्रत्येक फ़ंक्शन का परिभाषित मॉड्यूल यह निर्धारित करने के लिए जांचा जाता है कि क्या वह मॉड्यूल पोर्टेबल पीडीबी प्रारूप का उपयोग करता है। आंतरिक कैशिंग नीति में कुछ अंतरों के कारण, रनटाइम पोर्टेबल पीडीबी की खोज में पिछले .NET फ्रेमवर्क संस्करणों की तुलना में क्लासिक विंडोज पीडीबी की खोज में कहीं अधिक समय व्यतीत करता है।
यह स्वरूपित स्टैक ट्रेस को पहले की तुलना में अधिक धीरे-धीरे उत्पन्न करने का कारण बनता है।
यह समस्या फेंके गए अपवादों की संख्या नहीं बदलती है। हालांकि, यह उन अपवादों को संभालने के लिए अनुप्रयोगों की क्षमता को काफी कम कर देता है।
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 फ्रेमवर्क के नवीनतम संस्करण को डाउनलोड और इंस्टॉल करें।
उम्मीद है कि इससे मदद मिलेगी!