2013-07-07 15 views
6

से वस्तु को निकालने के लिए कैसे मैं एक सी # कई Pivotitems के साथ एक धुरी से मिलकर आवेदन किया है। सामान्य पिवोटिटम्स ठीक से उतारते हैं और स्मृति को रिसाव नहीं करते हैं। हालांकि, दो वस्तुओं पर, मेरे पास Drawingsurfaces हैं जिन पर मैं 3 डी मॉडल प्रस्तुत करने के लिए मोनोगेम का उपयोग करता हूं। उतराई और उनके इन्हीं की लोडिंग पर मैं पूरी तरह से नष्ट करने के लिए कोशिश कर रहा हूँ और उसके बाद पूरी तरह से "खेल" उदाहरणों को पुन: (जिसका मुख्य कारण Monogame आप इस समय दो सतहों को आकर्षित करने के लिए अनुमति नहीं है और क्योंकि वे और स्मृति का एक बहुत का उपयोग नहीं है उनमें से दोनों के लिए पर्याप्त नहीं है)।सी # पूरी तरह से स्मृति

मेरे समस्या यह है कि में आता है जब मैं Xamlgame कि लोड हो रहा है यह सब स्मृति में इसका इस्तेमाल किया जारी नहीं करता है पर बनाई गई है निपटाने। इसका मतलब है कि जब भी मैं Xamlgame को फिर से बना देता हूं, तब तक यह और अधिक स्मृति का उपयोग शुरू करता है जब तक कि कोई और बाएं न हो। इसलिए, मैं जानना चाहता हूं कि ऑब्जेक्ट को लोड करने पर उपयोग की जाने वाली सभी मेमोरी का पूरी तरह से निपटान करने के लिए कोई सी # तरीका है या नहीं।

किसी भी Monogame विशिष्ट तरीके से भी सराहना की जाएगी। फिलहाल मैं अपने वर्टेक्स और इंडेक्स बफर का पहला निपटान कर रहा हूं, फिर मैं अपनी वर्टेक्स और इंडेक्स सूचियों को साफ़ करता हूं, फिर मैं अपने बेसिसफैक्ट और मेरे ग्राफिक्सडेविसेमनेजर का निपटान करता हूं, फिर मैं "गेम" पर निपटान करता हूं और आखिरकार मैं चर बदलता हूं शून्य के बराबर "गेम" होता है।

पी एस। यदि आपने कभी भी एक्सएनए में ऐसा किया है तो आप भी मेरी मदद कर सकते हैं क्योंकि सिंटैक्स मूल रूप से वही है।

संपादित करें (MonoGame हो सकता है बग):

अब मैं सभी बफ़र्स आदि ठीक से साफ करने के लिए प्रबंधित किया है। यद्यपि मेरे BasicEffect पर अभी भी एक स्मृति रिसाव है। मैं इसे निपटाने और यह शून्य बनाने की कोशिश की है लेकिन कोई बात नहीं क्या यह सिर्फ हर बार अधिक से अधिक स्मृति का उपयोग रहता है मैं अपने धुरी से लोड करें।

+0

यदि आप सभी 'आईडीस्पोज़ेबल' संसाधनों का निपटारा कर रहे हैं तो ['जीसी। कोलेक्ट'] (http://msdn.microsoft.com/en-us/library/System.GC.Collect.aspx) नहीं करता है काम? – Romoku

+0

मैं इसे कॉल कर रहा हूं लेकिन ऐसा प्रतीत नहीं होता है कि – Gerharddc

+0

क्या आप वाकई सभी कनेक्शन और वस्तुओं का निपटारा कर रहे हैं? क्या आप अपना कोड साझा कर सकते हैं? –

उत्तर

-2

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

6

उपयोग कचरा कलेक्टर और इसे अंतिम रूप देने के लिए प्रतीक्षा करें।

GC.Collect(); 
GC.WaitForPendingFinalizers(); 

यह हैं:

XamlGame = null 

तो फिर तुम कचरा कलेक्टर को सक्रिय कर सकते हैं:

  GC.Collect(); 
      GC.WaitForPendingFinalizers(); 
4

सबसे पहले आप शून्य पर मूल्य निर्धारित करना होगा ताकि अब इसे उपयोग में है XamlGame ऑब्जेक्ट की तुलना में निपटान नहीं करता है या इसके संदर्भ में अभी भी किसी अन्य ऑब्जेक्ट द्वारा आयोजित नहीं किया जा रहा है।

ध्यान रखें कि यदि XamlGame खेल कक्षा से विरासत में है, तो आप इसे निपटाने में सक्षम नहीं होंगे क्योंकि इसमें चल रहे निष्पादन लूप शामिल हैं जो पूरे गेम एप्लिकेशन को जीवंत रखता है। यदि आपने इसका निपटारा किया है तो एप्लिकेशन क्रैश हो जाएगा और समाप्त हो जाएगा।

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