मैं एक बड़े सी # प्रोग्राम में मेमोरी रिसाव को ट्रैक करने की कोशिश कर रहा हूं जो एकाधिक धागे पैदा करता है। इस प्रक्रिया में, मैंने एक छोटा सा साइड प्रोग्राम बनाया है जिसका उपयोग मैं कुछ बुनियादी चीजों का परीक्षण करने के लिए कर रहा हूं, और मुझे कुछ व्यवहार मिला जो मैं वास्तव में समझ में नहीं आता।थ्रेड मेमोरी लीक
class Program
{
static void test()
{
}
static void Main(string[] args)
{
while (true)
{
Thread test_thread = new Thread(() => test());
test_thread.Start();
Thread.Sleep(20);
}
}
}
इस प्रोग्राम को चलाने से, मुझे लगता है कि प्रोग्राम का मेमोरी उपयोग बिना रोक के लगातार बढ़ता है। कुछ ही मिनटों में स्मृति उपयोग 100 एमबी से अधिक अच्छी तरह से चला जाता है और चढ़ाई करता रहता है। अगर मैं लाइन test_thread.Start(); पर टिप्पणी करता हूं, प्रोग्राम द्वारा उपयोग की गई स्मृति लगभग कुछ मेगाबाइट्स पर अधिकतम हो जाती है, और स्तर समाप्त हो जाता है। मैंने जीसी.कोलेक्ट() का उपयोग करते हुए लूप के अंत में कचरा संग्रह को मजबूर करने का भी प्रयास किया, लेकिन ऐसा कुछ नहीं लगता था।
मैंने सोचा कि जैसे ही फ़ंक्शन समाप्त हो गया है, जैसे ही जीसी इसे अपनाने की अनुमति दे रहा है, लेकिन ऐसा प्रतीत नहीं होता है। मुझे यहां कुछ गहराई से समझना नहीं चाहिए, और मैं इस रिसाव को ठीक करने में कुछ मदद की सराहना करता हूं। अग्रिम में धन्यवाद!