2010-03-06 16 views
5

मैं कैसे पता कर सकते हैं कि कितने वस्तुओं सी # में एक वर्ग के बनाए जाते हैं सी # में एक वर्ग के कितने ऑब्जेक्ट का निर्माण होगामैं कैसे पता कर सकते हैं

उत्तर

13

आप एक स्थिर काउंटर डाल करने के लिए होगा कि में वृद्धि की गई थी निर्माण पर:

public class Foo 
{ 
    private static long instanceCount; 

    public Foo() 
    { 
     // Increment in atomic and thread-safe manner 
     Interlocked.Increment(ref instanceCount); 
    } 
} 

कुछ नोट:

  • यह वर्तमान में स्मृति मामलों में की संख्या की गिनती नहीं करता है - कि decr करने के लिए एक finalizer होने शामिल होगा काउंटर ईमेंट; मैं सिफारिश नहीं होगा कि
  • यह क्रमबद्धता जैसे कुछ तंत्र है जिसके एक निर्माता
  • जाहिर है यह केवल काम करता है आप वर्ग संशोधित कर सकते हैं, तो बाईपास कर सकता है के माध्यम से बनाया उदाहरणों में शामिल नहीं किया जाएगा; आप नहीं, System.String के उदाहरण बनाई की संख्या पता कर सकते हैं उदाहरण के लिए -/डिबगिंग में hooking रूपरेखा एपीआई

आप यह जानकारी क्यों चाहते हैं ब्याज से बाहर है, बिना कम से कम नहीं?

+1

कैसे के बारे में 'Interlocked.Decrement (संदर्भ instanceCount)' वस्तु का नाशक में? फिर 'instanceCount' वर्तमान में रहने वाले ऑब्जेक्ट उदाहरणों का अनुमान देगा। – user

+0

सहमत है, यह अंतिम रूप दिए जाने के लिए नाशक भीतर घटती उपयोगी होता है। '~ Foo() {Interlocked.Decrement (ref instanceCount); } '@ जोन्स स्केट, आप इसकी सिफारिश क्यों नहीं करेंगे (ब्याज से बाहर)? – defines

+0

@defines: क्योंकि है कि कुछ अलग करने की गिनती है - गिनती की जाती है कि कितने वस्तुओं को अंतिम रूप नहीं दिया गया है। ओपी बनाया गया वस्तुओं की संख्या के लिए पूछ रहा था। अगर मैं 100 बनाता हूं और वे सभी को अंतिम रूप दिया गया है/जीसीएड, मैंने अभी भी 100 ऑब्जेक्ट्स बनाए हैं। –

1

इस एक वर्ग है कि आप तैयार किया है है?

यदि हां, तो वर्ग कि निर्माता में वृद्धि की जाती है और निपटान में कम कर रहा है के लिए एक काउंटर जोड़ें।

संभावित आप प्रदर्शन मॉनिटर में यह ट्रैक कर सकते हैं कि यह एक प्रदर्शन काउंटर बना सकता है।

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