2009-10-16 22 views
5

मेरे पास एक डबल लिंक्ड सूची (कतार) है जो मैंने स्वयं बनाई है।एक डबल-लिंक्ड सूची साफ़ करना

मैं सोच रहा हूं, लिंक की गई सूची को साफ़ करने के लिए, क्या यह केवल सिर और पूंछ संदर्भों को हटाने के लिए पर्याप्त है?

उदा

public void Clear() 
{ 
    Head = null; 
    Tail = null; 
} 

मैं एक डोमिनो प्रभाव इमेजिंग हूँ, लेकिन मैं एक मुश्किल समय यह परीक्षण कर रहा हूँ। यह पूरे ऑब्जेक्ट को कम से कम खाली दिखाई देगा। सभी डेटा अनुरोध (जैसे peek, dequeue आदि) शून्य लौटाता है। आप कुछ नई वस्तुओं को आसानी से स्वीकार कर सकते हैं। यह वास्तव में कार्यात्मक लगता है कि यह काम कर रहा है।

लेकिन मैं वास्तव में जानना चाहता हूं कि मैं इसे सही तरीके से कर रहा हूं या नहीं।

उत्तर

7

संक्षिप्त उत्तर हाँ है, कचरा संग्रह सभी लिंक किए गए सूची नोड्स को साफ़ कर देगा, बशर्ते कि बाहरी कुछ भी उनके संदर्भ में न हो।

परीक्षण करने का सबसे आसान तरीका है आपकी लिंक की गई सूची नोड ऑब्जेक्ट को अंतिम रूप देने के लिए जो कुछ लॉगिंग आउटपुट करता है। ध्यान दें कि जब आप कचरा कलेक्टर चलाते हैं तो यह सुनिश्चित नहीं हो सकता है कि (जीसी.कोलेक्ट() के माध्यम से इसे मजबूर किए बिना) ताकि आप को साफ़() विधि के रूप में जल्द ही बुलाए जाने वाले फाइनल को नहीं देख सकें।

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

+0

धन्यवाद, यह चीजों को अच्छी तरह से बताता है – CasperT

4

जब तक संग्रह में वस्तुओं का निपटान करने की आवश्यकता नहीं होती है, और ऐसा करने के लिए संग्रह की ज़िम्मेदारी है, तो आपकी विधि शायद सबसे अच्छा तरीका है।

चूंकि ऑब्जेक्ट (कोई लाइव संदर्भ नहीं) के लिए कोई रूट नहीं है, कचरा संग्रह इसे उठा सकता है और इसे हटा सकता है।

+0

सवाल है, इस जीसी पर एक पास में होगा, या ओ पी के रूप में डोमिनो प्रभाव में प्रत्येक 'पंक्ति' का वर्णन होगा यह एक एकल पास ले? –

+0

उत्तर के लिए धन्यवाद। यह फिर से आश्वासन दिया गया था। मैं फैक्टिसियस वीर स्वीकार करूंगा, क्योंकि उन्होंने समझाया कि और अधिक अच्छी तरह से क्या होगा :) – CasperT

+2

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

2

मैं एक डोमिनो प्रभाव

इमेजिंग हूँ यह कैसे काम करता है जी सी नहीं है।

जीसी पहले सबकुछ "मृत" को चिह्नित करता है, फिर रूट ऑब्जेक्ट्स से शुरू होता है, जो उनके द्वारा संदर्भित सभी ऑब्जेक्ट्स को पार करता है, प्रत्येक को "जीवित" के रूप में चिह्नित करता है।

चूंकि आपकी सूची अब किसी रूट ऑब्जेक्ट (या बच्चों) द्वारा संदर्भित नहीं है, इसे "मृत" चिह्नित किया जाएगा।

दूसरा पास "मृत" वस्तुओं को मुक्त करता है।

मुझे संदेह है कि आप एक अंतिमकर्ता में मान सकते हैं कि किसी भी वस्तु सूची में दोनों पक्षों को पहले एकत्र नहीं किया गया है, यानी यह जीसी के अपने आदेश में सूची के क्रम में नहीं होगा।

एक यहाँ और अधिक विस्तार बिट: - http://msdn.microsoft.com/en-us/magazine/bb985010.aspx

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