यदि आप ऐसा करना चाहते हैं तो यह एक आसान तरीका है जब जीसी चल रहा है, यह आपको ठीक से नहीं बताएगा कि यह कब शुरू होता है, न ही जब यह समाप्त होता है, लेकिन यदि आप इससे आउटपुट देख सकते हैं विधि जब आप अपने सर्वर पर विरामों को देखते हैं तो मैं यहां वर्णन करूंगा, आपको पता लगाना चाहिए कि जीसी आपकी समस्या है या नहीं।
असल में, आप जो करते हैं वह अंतिम श्रेणी के साथ एक वर्ग बनाते हैं, उस वर्ग की वस्तु का निर्माण करते हैं और केवल संदर्भ छोड़ते हैं (यानी इसे स्टोर न करें)। ऑब्जेक्ट तब तक छोड़ा जाएगा जब तक कि जीसी इसे हिट न करे, जहां इसे अंतिम रूप दिया जाएगा।
चाल अब आपके द्वारा लॉग इन करने वाले अंतिम रूप में है (जिसे आप उपयोग करना चाहते हैं) में है कि अंतिम रूप से चल रहा है, और जब तक कि एपडोमेन बंद करने की प्रक्रिया में न हो, तब तक आप बस एक नई वस्तु का निर्माण करें जिसे आप तुरंत छोड़ दें संदर्भ, अगले जीसी के लिए तैयार है।
यह आश्चर्यजनक रूप से अच्छी तरह से काम करता है और आपके हिस्से से अधिक काम की आवश्यकता नहीं है।
namespace PresentationMode
{
/// <summary>
/// This class is used to get a running log of the number of garbage collections that occur,
/// when running with logging.
/// </summary>
public sealed class GCLog
{
#region Construction & Destruction
/// <summary>
/// Releases unmanaged resources and performs other cleanup operations before the
/// <see cref="GCLog"/> is reclaimed by garbage collection.
/// </summary>
~GCLog()
{
SiAuto.Main.LogMessage("GARBAGE COLLECTED");
if (!AppDomain.CurrentDomain.IsFinalizingForUnload() && !Environment.HasShutdownStarted)
new GCLog();
}
#endregion
#region Public Static Methods
/// <summary>
/// Registers this instance.
/// </summary>
public static void Register()
{
#if DEBUG
if (SiAuto.Si.Enabled)
new GCLog();
#endif
}
#endregion
}
}
आपको बस इतना करना है फोन .Register()
विधि है:
यहाँ वर्ग मैं उपयोग करते हैं। यहां ध्यान दें कि मैं अपने लॉगिंग टूल के रूप में SmartInspect का उपयोग करता हूं ताकि आप किसी अन्य चीज़ के साथ SiAuto
से जुड़े कॉल को प्रतिस्थापित करना चाहें।
एक अन्य प्रोजेक्ट में, SmartInspect का उपयोग करके, जिसमें 'घड़ियों' की धारणा है, जहां आप संख्यात्मक मान भेज सकते हैं, और लॉगिंग टूल में उन्हें ग्राफ़ कर सकते हैं, मैंने मूल्य 0, 1, और फिर 0 को तेजी से उत्तराधिकार में भेजा , क्योंकि यह मुझे एक ग्राफ देगा जो हर समय 0 पर आयोजित होता है, लेकिन जीसी चलने पर एक तेज स्पाइक उत्पन्न करता है। इसे बैकग्राउंड थ्रेड के साथ युगल करें जिसने मॉनिटर किए गए सीपीयू उपयोग और मेमोरी के साथ काम करने के लिए मुझे बहुत अच्छा डेटा दिया।
आपकी टिप्पणियों के लिए धन्यवाद, यह तेज़ था :-) मैं थोड़ी देर के लिए उत्तर की तलाश कर रहा हूं, इसलिए मुझे पहले से ही इन सुझावों (पहली 3 टिप्पणियों) के बारे में पता है। मैं एक टाइमलाइन पर दिखाना चाहता हूं जब जीसी चल रहा है और जब यह नहीं है। तो यह जानकर कि यह कब किया जाता है, या आखिरी संग्रह के बाद से यह कितना समय उपयोग कर रहा है, ऐसा नहीं करेगा। मुझे आश्चर्य है कि मैं अभी तक समाधान नहीं ढूंढ पा रहा हूं, लेकिन यदि कुछ भी मौजूद नहीं है तो मैं इसे करने के लिए अपना खुद का hax0r टूल लिखने की कोशिश करूंगा। फिर से धन्यवाद! – Rabbit