2008-09-19 10 views
19

क्या किसी अन्य प्रक्रिया से या WinDBG के अंदर से .NET प्रक्रिया में कचरा संग्रहण ट्रिगर करने का कोई तरीका है?बाहरी रूप से एक .NET कचरा संग्रह ट्रिगर करना

प्रबंधित डिबगिंग सहायक हैं जो एक संग्रह को मजबूर करते हैं जैसे आप मूल/प्रबंधित सीमा पार करते हैं, और AQTime ऐसा लगता है कि यह बटन ऐसा करता है, लेकिन मुझे यह कैसे करना है इस पर कोई दस्तावेज नहीं मिल रहा है।

+0

संभावित डुप्लिकेट [कमांड लाइन से कचरा कलेक्टर चलाएं?] (Http://stackoverflow.com/questions/3594069/run-garbage-collector-from-command-line) –

उत्तर

2

जॉन कॉकटोस्तान का जीसी का उपयोग करने का उत्तर। जब दृश्य स्टूडियो में दृश्य स्टूडियो में सबसे अच्छा विकल्प होता है तो चयन करें।

मुझे अभी भी WinDBG के तहत संग्रह करने का विकल्प नहीं मिल रहा है, लेकिन "कितनी मेमोरी पुनः प्राप्त करने योग्य" की समस्या पर एक कदम वापस ले रही है? (जॉन के जवाब पर मेरी टिप्पणी देखें) मुझे लगता है कि कुछ संयोजन के माध्यम से एक स्क्रिप्ट (PowerDBG?) खोज का उपयोग करके एक विकल्प है! डंपहेप और! जीसीआरयूटी गैर-रूट वाले हैंडल और कुल स्थान का उपयोग करने के लिए (मूल रूप से एल्गोरिदम का अनुकरण करें जीसी डीबगर का उपयोग करेगा)। लेकिन इस बारे में सोचने के बाद से मुझे इनमें से कोई भी बग नहीं मिला है, इसलिए कोड करने के लिए कोड लिखने की कोशिश नहीं की है।

0

यदि आप रीमोटिंग के माध्यम से फ़ंक्शन/ऑब्जेक्ट का पर्दाफाश करते हैं, तो इसे आसानी से किया जा सकता है।

+0

जिन अनुप्रयोगों में मैं दिलचस्प हूं, वे इसे करते हैं वर्तमान में रिमोटिंग का समर्थन न करें और इसके लिए इसे जोड़ने में असमर्थ होगा। –

+0

एक खुलासा हटाने योग्य वस्तु क्यों असुरक्षित होगी? आप इसे 20 से कम लाइनों के साथ कर सकते हैं। यहां एक छोटा सा उदाहरण दिया गया है: http://xacc.svn.sourceforge.net/viewvc/xacc/xacc/Configuration/KickStart.cs?view=markup – leppie

+0

क्योंकि यह मूल सी ++ ऐप है जो केवल COM के माध्यम से .NET तक पहुंचता है, और जबकि वहां बहुत सी सी # राशि है जो उस तक पहुंचने की गारंटी है जहां आप इसे हुक कर सकते हैं, यह बहुत छोटा है। गैर तकनीकी कारण भी हैं। –

11

अच्छा ... तत्काल खिड़की है। यदि आपके पास प्रक्रिया को जोड़ने की लक्जरी है, तो मुझे लगता है कि आप मैन्युअल रूप से जीसी कर सकते हैं। तत्काल विंडो में चयन करें।

बड़ा सवाल: आप जीसी को मैन्युअल रूप से प्रेरित क्यों करना चाहते हैं? चयन? यह एक बुरा आदत है, और बहुत बड़े डिजाइन मुद्दों का संकेत है।

+1

ऐसा कुछ नहीं है जो मैं अक्सर आदत रखने के लिए पर्याप्त करना चाहता हूं :-)। कभी-कभी स्मृति उपयोग के मुद्दे होते हैं; जब ये होते हैं तो जीसी अक्सर एकत्रित हो जाएगा। जब जांच की जाती है तो गति के कारणों के लिए कट ऑफ डेटा सेट का उपयोग करना बेहतर होता है लेकिन ये जीसी को उसी तरह तनाव नहीं देते हैं। ... –

+0

[जारी ...] छोटे सेटों पर कभी-कभी उपयोगी जानकारी का एक पहलू यह है कि स्मृति उपयोग का अनुपात जीसी द्वारा संभावित रूप से पुनः प्राप्त करने योग्य है। यदि यह केवल एक विशेष बिंदु है तो आप कोड को बलपूर्वक ट्विक कर सकते हैं, लेकिन कभी-कभी अधिक विज्ञापन विधियां सुविधाजनक होंगी। –

+0

मैं मानता हूं, मैंने जीसी का उपयोग किया है। उस उद्देश्य के लिए चयन करें, आम तौर पर "मैं क्या वापस प्राप्त कर सकता हूं" देखने के लिए परफमन देख रहा हूं। अच्छा है, ऐसा लगता है कि आप जीसी बहस के दाहिने तरफ हैं :) –

8

another question में उत्तर दिया:

असल में, PerfView का उपयोग करें:

PerfView.exe ForceGC [ProcessName | Process ID] /AcceptEULA 

यह उत्पादन उपयोग के लिए नहीं है।

+1

नवीनतम संस्करण 2.0.7 को भी '/ AcceptEula' स्विच की आवश्यकता है। – bergmeister

+0

धन्यवाद @bergmeister, मैंने कमांड लाइन अपडेट की है। –

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