2010-11-25 12 views
6

अप्रबंधित वस्तुओं के लिए Add/RemoveMemoryPressure का उपयोग करने का सही तरीका क्या है? मेरे पास एक अप्रबंधित वस्तु है- लेकिन इसका भारी उपयोग होता है, उदाहरण के लिए, एसटीएल कंटेनर। क्या मैं लगातार प्रबंधित जीसी को अप्रबंधित ऑब्जेक्ट के कुल आकार में प्रत्येक परिवर्तन के साथ अपडेट करना चाहता हूं? या सिर्फ यह कच्चा आवंटन आकार है? और जब मैं RemoveMemoryPressure कहूं? Finalizer? निपटान()?अप्रबंधित वस्तुओं के लिए GC.AddMemoryPressure

+0

कचरा कलेक्टर आप अप्रबंधित वस्तुओं को इकट्ठा करने की अपेक्षा कैसे करते हैं? – dtb

+1

@dtb: [GC.AddMemoryPressure] (http://msdn.microsoft.com/en-us/library/system.gc.addmemorypressure.aspx) रनटाइम को बताता है कि एक प्रबंधित ऑब्जेक्ट है जो आवंटित स्मृति के एक्स बाइट्स को आवंटित करता है (उदाहरण के लिए एक COM ऑब्जेक्ट का संदर्भ रखते हुए)। इसके बाद यह कचरा कलेक्टर को मृत वस्तुओं की तलाश करने और प्रक्रिया में अप्रबंधित स्मृति को मुक्त करने, अपने अंतिमकरण को चलाने के लिए प्रोत्साहित कर सकता है। –

+0

@ डीटीबी: उस प्रबंधित ऑब्जेक्ट को एकत्र करके जो इसका मालिक है। – Puppy

उत्तर

2
here से

(और @Wim Coenen द्वारा नोट):

सरल उपयोग पैटर्न में, एक प्रबंधित वस्तु निर्माता में अप्रबंधित स्मृति और निपटान में रिलीज यह या विधि को अंतिम रूप आवंटित करता है। अप्रबंधित स्मृति, आवंटित करने के बाद AddMemoryPressure विधि पर कॉल करें और इसे रिलीज़ करने के बाद RemoveMemoryPressure विधि को कॉल करें।

अधिक जटिल स्थितियों में, जहां अप्रबंधित स्मृति आवंटन परिवर्तन काफी हद तक कामयाब वस्तु की जीवनकाल के दौरान, आप क्रम करने के लिए इन वृद्धिशील परिवर्तन संवाद करने के लिए AddMemoryPressure और RemoveMemoryPressure तरीकों कॉल कर सकते हैं ।

तो आपको यह तय करना होगा कि इन परिवर्तनों को ट्रैक करने में कितना प्रयास करना है और आपको कितना लाभ मिलेगा।

+0

हां - मैंने सभी ऑब्जेक्ट्स के मास्टर ऑब्जेक्ट को सूचित करने के लिए मूल ऑब्जेक्ट्स के लिए डिफ़ॉल्ट आवंटक को बदल दिया, फिर प्रबंधित कोड में एक डिस्प्ले() ऑब्जेक्ट का उपयोग करके सभी प्रबंधित विधियों में परिवर्तनों के जीसी को स्वचालित रूप से अपडेट किया। – Puppy

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