12

MSDN के अनुसार, एक "टिप" है जिसमें कहा गया है कि समेकित कचरा संग्रह (या तो <gcConcurrent enabled="true"/> या अनिर्दिष्ट, क्योंकि यह डिफ़ॉल्ट व्यवहार है) के साथ भारी लोड के तहत चल रहा एक .NET अनुप्रयोग एक निष्पादन EngineException फेंक सकता है। क्या किसी को माइक्रोसॉफ्ट केबी आलेख या अन्य स्रोत के बारे में पता है जो इस पर अतिरिक्त पृष्ठभूमि प्रदान करता है?समवर्ती जीसी कभी-कभी एक्जिक्यूशनइंजिनएक्सप्शन (प्रति एमएसडीएन) का कारण क्यों बनता है?

हमने इसे सीधे एनएचबीर्नेट 3.2-आधारित विंडोज सर्विस एप्लिकेशन के साथ अनुभव किया है, जो ऑपरेशन के कुछ घंटों के बाद हमेशा दुर्घटनाग्रस्त हो जाएगा। हम ISession.Flush() कॉल के अपवाद को ट्रैक करने में सक्षम थे।

nhusers पर एक thread पर रिपोर्टिंग है जो एक ही समस्या प्रतीत होता है। उनके सुझाए गए कामकाज, जो समवर्ती जीसी को अक्षम करना था, ने अब तक हमारे लिए काम किया है, हालांकि सर्वर-मोड जीसी (<gcServer enable="true"/>) पर स्विच करना, जो समवर्ती जीसी को निष्पक्ष रूप से अक्षम करता है, ने भी चाल की है।

इसे एमएस को एक बग के रूप में सबमिट करने से पहले, मैं यह जानना चाहता हूं कि अगर किसी के पास समवर्ती जीसी इंस्टालिटी पर अतिरिक्त जानकारी है तो टिप का उल्लेख है।

+2

इस तथ्य को देखते हुए कि यह दस्तावेज है, आपकी बग "डिजाइन द्वारा" के रूप में बंद होने की संभावना है। उस तरफ, दिलचस्प सवाल है। – vcsjones

+2

@ निक जोन्स: .NET 4.0 दस्तावेज़ भी इसे अप्रचलित के रूप में सूचीबद्ध करता है और कहता है कि रनटाइम अब इस अपवाद को फेंकता नहीं है। – casperOne

+0

@ कैस्परऑन: नोट किया गया, लेकिन एनएच 3.2 को .NET 3.5 के खिलाफ संकलित किया गया है। –

उत्तर

5

मुझे संदेह है कि यह तब होता है जब एप्लिकेशन भारी भार में होता है क्योंकि जब समवर्ती जीसी सक्षम होता है, तो जीसी आपके आवेदन को रोक दिए बिना इसे करने का प्रयास करता है। यदि जीसी ऐसी स्थिति से मुकाबला करता है जहां वह जीसी चक्र के संयोजन चरण के दौरान स्मृति को स्थानांतरित करने की कोशिश करता है और स्मृति को स्थानांतरित करने में सक्षम नहीं है या एप्लिकेशन पॉइंटर्स को सही ढंग से अपडेट करने में सक्षम नहीं है, तो रनटाइम इसे फेंकने का कारण बन सकता है अपवाद क्योंकि यह आपके आवेदन को संभावित रूप से अमान्य स्थिति में डाल देगा।

जैसा कि @casperOne ने अपनी टिप्पणी में बताया है, इस अपवाद को .NET 4.0 में अप्रचलित के रूप में चिह्नित किया गया है, हालांकि इसका मतलब यह नहीं है कि जीसी अभी भी उसी स्थिति में नहीं जा सकता है जिससे इसे अपवाद फेंक दिया जाता है .NET 3.5। यदि जीसी खुद को उसी राज्य में प्राप्त कर लेता है, तो रनटाइम एक FailFast कमांड जारी करेगा और अपवाद फेंकने के बजाए समाप्त हो जाएगा।

+1

ध्यान दें कि, जबकि "एपीआई" अप्रचलित चिह्नित है, बग वास्तव में ** में होता है। नेट 4.0 ** (उदाहरण के लिए यह SO थ्रेड: [एप्लिकेशन ".NET रनटाइम में आंतरिक त्रुटि" के साथ क्रैश होता है) (http://stackoverflow.com/q/4367664/69809))। [एमएसडीएन केबी प्रविष्टि] (http://support.microsoft.com/kb/2679415) इसे x64 .NET 4 समस्या के रूप में वर्णित करता है, लेकिन मैं शर्त नहीं लगाता कि यह x64 तक सीमित है। हमें एक ही समस्या थी, और इसमें एनएचबीर्नेट भी शामिल था, और समवर्ती जीसी को बंद करने से इसे बंद कर दिया गया। यह सुबह में काम करने के लिए बेकार है और हमारे मुख्य सर्वर ऐप को आंतरिक .NET अपवाद द्वारा लाया गया है। :) – Groo

संबंधित मुद्दे