2010-05-03 13 views
5

मैं अपने आवेदन के जीवनकाल में किसी विशिष्ट वर्ग (प्रकार?) की ऑब्जेक्ट्स का निपटान कैसे कर रहा हूं, इस समय की गिनती कैसे रखूं। कल्पना कीजिए कि मेरे पास कक्षा ए है, अब, मैं गिनना चाहता हूं कि एसी की वस्तुओं को जीसी द्वारा कितनी बार एकत्र किया जाता है।किसी ऑब्जेक्ट पर जीसी क्लीनअप की संख्या

मुझे उम्मीद है कि मैं इस अधिकार का phrasing कर रहा हूं क्योंकि मुझे आज एक साक्षात्कार में यह पूछा गया था और मैंने जो जवाब दिया वह साक्षात्कारकर्ता को संतुष्ट नहीं करता था। और यही वह है जो मुझे कल्पना है कि वह पूछने की कोशिश कर रहा था।

मैं क्या कहा गया है कि एक वर्ग ए में गिनती कहा जाता है एक स्थिर क्षेत्र रखने के लिए और उस वस्तु की अंतिम रूप() कॉल में यह भी वृद्धि कर सकता था।

वह जिस उत्तर की अपेक्षा कर रहा था वह कुछ स्थिर ब्लॉक कहलाता था। मैंने कभी इसके बारे में .NET/C# में नहीं सुना है। क्या कोई यह समझा सकता है कि यह स्थिर ब्लॉक क्या है?

+3

मैं इन सवालों से कैसे नफरत करता हूं .... आपका उत्तर सही है क्योंकि यह काम करेगा। पूछताछकर्ता सही जवाब नहीं चाहता है लेकिन वह जो सुनता है उसे सुनना चाहता है। यह बहुत बेवकूफ है, मुझे लगता है। – Andrey

+1

मेरे ज्ञान के लिए, सी # या .NET में 'स्थिर ब्लॉक 'जैसी कोई चीज नहीं है। एक स्थिरकर्ता के साथ स्थिर चर का उपयोग करने का आपका उत्तर उपयुक्त है। एक मेमोरी प्रोफाइलर भी काम करेगा। – LBushkin

+0

मैं memprofiler को आज़मा दूंगा। आपके उत्तरों के लिए धन्यवाद दोस्तों। – tsps

उत्तर

1

तरह memprofiler, Redgate Ants, dotTrace, CLR Profiler या दृश्य स्टूडियो की टीम संस्करण (.NET 3.5 apparently के लिए व्यवस्थापक अधिकार की जरूरत है) एक उपकरण का उपयोग करें।

+0

मैं इन्हें जांचना सुनिश्चित कर दूंगा। धन्यवाद मिच। – tsps

0

शायद वह कक्षा के लिए एक स्थिर निर्माता का जिक्र कर रहा था?

public class Foo { 

    public static Foo() { /* gets called once before first operator new */ } 

} 
+0

@plinth, मैंने यही सोचा था। लेकिन उस पर भी, यह ट्रैक रखने में आपकी सहायता कैसे कर सकता है कि कक्षा का कितना बार निपटान किया जाता है? – James

+0

यह नहीं करता है। यह भ्रमित हिस्सा है। – plinth

+0

हाँ मुझे लगता है कि यह 'मामला है जो कि पुस्तक में है' का मामला है। बिल्कुल यकीन नहीं है कि वे कौन सी किताब पढ़ रहे थे ... – James

0

एक स्थिर ब्लॉक सी # में एक Static Constructor के लिए वास्तव में दूसरा नाम है। पहले उदाहरण बनने से पहले इसे कक्षा में intialize करने के लिए स्वचालित रूप से कहा जाता है। मैं नहीं देख सकता कि इससे आपको ट्रैक रखने में मदद मिलेगी कि कक्षा को कितनी बार निपटान किया गया है। एकमात्र तरीका मैं सोच सकता हूं कि आपकी कक्षा IDisposable लागू करेगी, disposeCount नामक एक स्थैतिक क्षेत्र है और Dispose पर प्रत्येक कॉल पर इसे बढ़ाएं या सुनिश्चित करें कि आपने Finalize विधि में सही तरीके से कहा था। आपका जवाब निश्चित रूप से गलत नहीं था, और आपको यह इंगित करना चाहिए कि यदि आपको दूसरा साक्षात्कार मिलता है तो :)

+0

दुर्भाग्यवश, वह अंतिम साक्षात्कार था। मैंने बस उसे बताया कि मुझे .NET में ऐसा कुछ पता नहीं था। अगली बार मैं अपने .NET कौशल के साथ अधिक आत्मविश्वास रखूंगा। :) – tsps

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