बस दूसरे दिन मैं एक मेमोरी रिसाव की जांच कर रहा था जो ऐप को ~ 50 एमबी से ~ 130 एमबी तक दो मिनट से कम कर रहा था। यह पता चला है कि समस्या ConcurrentQueue कक्षा के साथ थी। आंतरिक रूप से, कक्षा एरे की एक लिंक्ड सूची स्टोर करता है। जब किसी आइटम को ConcurrentQueue से हटा दिया जाता है, तो सरणी में अनुक्रमणिका बंप हो जाती है, लेकिन आइटम सरणी में रहता है (यानी यह शून्य पर सेट नहीं है)। पूरे सरणी नोड को पर्याप्त एनक्यूज/डेक्यू के बाद गिरा दिया जाता है, इसलिए यह तकनीकी रूप से लीक नहीं है, लेकिन यदि ConcurrentQueue में बड़ी ऑब्जेक्ट्स डालते हैं, तो यह हाथ से तेज़ हो सकता है। दस्तावेज इस खतरे का कोई ध्यान नहीं देता है।.NET Framework - संभावित मेमोरी-लीकी कक्षाएं?
मैं सोच रहा था कि बेस क्लास लाइब्रेरी में अन्य संभावित स्मृति समस्याएं क्या हैं? मुझे सबस्ट्रिंग एक के बारे में पता है (यानी, यदि आप सबस्ट्रिंग को कॉल करते हैं और केवल परिणाम पर पकड़ते हैं, तो पूरी स्ट्रिंग अभी भी स्मृति में होगी)। आप किसी अन्य का सामना करना पड़ा है?
हाँ। जावा ने इसे स्ट्रिंगबिल्डर का उपयोग करने के लिए परिवर्तित करके हल किया; मुझे नहीं पता कि .NET ने ऐसा क्यों नहीं किया है। –
.NET के पास यह सिस्टम के नीचे है। टेक्स्ट – Aren
वीएस सी # कंपाइलर स्ट्रिंगबिल्डर में आंतरिक रूप से अभिव्यक्तियों को परिवर्तित करने के लिए पर्याप्त स्मार्ट है ("यह" + "" + "स्ट्रिंग #" + स्ट्रिंग नम्बर) आंतरिक रूप से स्ट्रिंगबिल्डर में है, अगर यह समझ में आता है ऐसा करने के लिए। –