2012-06-22 14 views
6

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

हम शुरू में checkedListBox.Items.Clear(); उपयोग करने की कोशिश, और कुछ चारों ओर Googling के बाद, हम बजाय निम्नलिखित की तरह कुछ करने की कोशिश की:

for (int i = checkedListBox.Items.Count - 1; i >= 0; i--) 
{ 
    checkedListBox.Items.RemoveAt(i); 
} 

दुर्भाग्य से, ऊपर इस मुद्दे को हल नहीं किया। मैंने एमएसडीएन मंचों पर यह विचार पाया, लेकिन मैं आज सुबह फिर से लिंक ढूंढने के लिए नहीं कर सकता। हालांकि, उस मंच ने कहा था कि किसी ने अपना आवेदन प्रोफाइल किया था और CheckedListBox.Items.Clear() में मेमोरी लीक पाया था।

क्या किसी को भी एक कार्यात्मक काम के बारे में पता है?

संपादित करें: FingerTheCat के जवाब अस्थायी रूप से हमारे समस्या हल नहीं है, इसलिए मैं अब के लिए उत्तर के रूप में प्रतीक होगा। हालांकि, हमने वास्तविक समस्या को खोजने और खोजने के लिए कोड के माध्यम से मिलना शुरू कर दिया है। दुर्भाग्यवश, वर्तमान कार्यान्वयन काफी हद तक स्पेगेटी कोड है, इसलिए कुछ भी ढूंढने से कुछ दिन पहले हो सकता है।

+0

चेक किए गए सूची बॉक्स में आप किस प्रकार के आइटम जोड़ रहे हैं? आपको सूची बॉक्स से उन्हें हटाने के अलावा इन ऑब्जेक्ट्स के कुछ स्पष्ट सफाई करने की आवश्यकता हो सकती है (जैसे उन्हें 'डिस्प्ले()' पर कॉल करना आदि)। – MusiGenesis

+0

आप लूप के साथ मेमोरी रिसाव को हल करने में सक्षम हैं? – Damith

+3

आप सुरक्षित रूप से यह मान सकते हैं कि चेकडलिस्टबॉक्स * मेमोरी रिसाव नहीं करता है। .NET प्रदर्शन काउंटर का निरीक्षण करने के लिए Perfmon.exe का उपयोग करें और जांचें कि नियमित कचरा संग्रह हो रहा है। यदि नहीं तो आपको अपने ऐप में गायब निपटान() कॉल के लिए शिकार करने की आवश्यकता होगी। –

उत्तर

0

जैसा कि यह पता चला है, किसी ने एप्लिकेशन में डिबगिंग कोड का एक टुकड़ा छोड़ा था, जो इसे ArrayList पर बिना किसी समाशोधन के वर्बोज़ लॉग जानकारी को जोड़ रहा था। वह कोड ArrayList की प्रतियां भी अपने आप में जोड़ रहा था। निश्चित रूप से बाहर निकलना भूलना एक अच्छी बात नहीं है।

-2

ऐसा करने के लिए सबसे अच्छी बात है, आपके कोड में कुछ बिंदुओं पर कचरा कोलेक्टर को कॉल करना है। बस जीसी जोड़ें। चयन(); कुछ लूप के पास और इसे आपकी मेमोरी समस्या को ठीक करना चाहिए।

+2

यह निश्चित रूप से सही फिक्स नहीं है। वास्तविक समस्या का निदान करते समय जीसी। कोलेक्ट() अभी भी उपयोगी हो सकता है। – Henrik

+1

कॉलिंग 'जीसी। कोलेक्ट() 'समाधान * समाधान नहीं है। –

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