2008-09-17 10 views
14

.NET में, इस कोड के बाद, Thread ऑब्जेक्ट को कचरा होने से कौन सा तंत्र रोकता है?क्या सी # में एक थ्रेड को एकत्रित होने से रोकता है?

new Thread(Foo).Start(); 
GC.Collect(); 

हाँ, यह कुछ धागा के लिए एक संदर्भ है ग्रहण करने के लिए सुरक्षित है, मैं सिर्फ वास्तव में क्या भटक रहा था। किसी कारण से परावर्तक मुझे System.Threading नहीं दिखाता है, इसलिए मैं इसे स्वयं खोद नहीं सकता (मुझे पता है कि एमएस ने .NET ढांचे के लिए स्रोत कोड जारी किया है, मेरे पास यह आसान नहीं है)।

उत्तर

14

रनटाइम तब तक धागे का संदर्भ रखता है जब तक यह चल रहा है। जीसी इसे तब तक इकट्ठा नहीं करेगा जब तक कि कोई भी उस संदर्भ को तब तक जारी रखे।

0

अच्छा, यह मानना ​​सुरक्षित है कि अगर कोई धागा कहीं चल रहा है तो इसका कुछ संदर्भ है तो क्या कचरा संग्रह को रोकने के लिए पर्याप्त नहीं होगा?

-3

नए थ्रेड को स्थानीय क्षेत्र में असाइन करें?

class YourClass 
{ 
    Thread thread; 

    void Start() 
    { 
    thread = new Thread(Foo); 
    thread.Start(); 
    GC.Collect(); 
    } 
} 

कूड़ा संग्रह everyting कि संदर्भ तो अपने कोड में वहाँ धागा करने के लिए कोई क्षेत्र/चर संदर्भित है नहीं है, एकत्र करता है, तो यह एकत्र किया जाएगा।

+2

नहीं, यह नहीं होगा। रनटाइम एक संदर्भ रखता है। अन्यथा यदि आप संदर्भ खो देते हैं तो एक चलने वाला थ्रेड एकत्र किया जाएगा। – EricSchaefer

2

यह कचरा कलेक्टर की एक हार्ड वायर्ड सुविधा है। चलने वाले धागे एकत्र नहीं किए जाते हैं। हालांकि ध्यान दें

0

महत्वपूर्ण बात करने के लिए - अगर आपकी धागा IsBackground = के साथ चिह्नित है यह सच है, यह

7

यह धागा चल रहा है या नहीं पर निर्भर करता है बाहर निकलने से पूरी प्रक्रिया पर रोक नहीं लगेगी। यदि आपने अभी थ्रेड ऑब्जेक्ट बनाया है और इसे शुरू नहीं किया है, तो यह एक सामान्य प्रबंधित ऑब्जेक्ट है, यानी जीसी के लिए पात्र है। जैसे ही आप धागा शुरू करते हैं, या जब आप पहले से चल रहे थ्रेड (GetCurrentThread) के लिए थ्रेड ऑब्जेक्ट प्राप्त करते हैं तो यह थोड़ा अलग होता है। "खुला वस्तु", प्रबंधित थ्रेड, अब सीएलआर के भीतर मजबूत संदर्भ पर है, इसलिए आप हमेशा एक ही उदाहरण प्राप्त करते हैं। जब थ्रेड समाप्त हो जाता है, तो यह मजबूत संदर्भ जारी किया जाता है, और जैसे ही आपके पास कोई अन्य संदर्भ नहीं है (अब मृत) थ्रेड के रूप में प्रबंधित ऑब्जेक्ट एकत्र किया जाएगा।

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