2011-03-16 11 views
5

के साथ समस्या मैं कुछ ट्रेस जानकारी लॉग इन करने के लिए सी # में एक मल्टीलाइन टेक्स्ट बॉक्स का उपयोग कर रहा हूं। मैं बस AppendText("text-goes-here\r\n") का उपयोग करता हूं क्योंकि मुझे लाइन जोड़ने की आवश्यकता है।सी # मल्टीलाइन टेक्स्टबॉक्स मेमोरी उपयोग

मैंने इस कार्यक्रम को कुछ दिनों तक चलाया है (बहुत सक्रिय ट्रेस के साथ) और मैंने देखा कि यह बहुत सारी मेमोरी का उपयोग कर रहा था। लंबी कहानी छोटी, ऐसा प्रतीत होता है कि अधिकतम लम्बाई मान के साथ भी बहुत छोटा (256) टेक्स्ट बॉक्स की सामग्री बस विस्तार करती रहती है।

मैंने सोचा कि यह एक फीफो की तरह काम करता है (अधिकतमतम टेक्स्ट को दूर करने वाला सबसे पुराना पाठ फेंक रहा है)। ऐसा नहीं होता है, यह सिर्फ आकार में बढ़ता रहता है। यह स्पष्ट रूप से मेरी स्मृति अपशिष्ट का कारण है। किसी को पता है कि मैं क्या गलत कर रहा हूँ?


जोड़ा गया प्रारंभिक सवाल के बाद कुछ घंटों ... ठीक है, मैं सुझाव नीचे दिए गए कोड की कोशिश की। इसे जल्दी से जांचने के लिए, मैंने बस अपने ऐप में टाइमर जोड़ा और उस टाइमर टिक से अब मैं एक विधि कहता हूं जो अनिवार्य रूप से नीचे दिए गए कोड जैसा ही है। टिक दर अधिक है ताकि मैं प्रक्रिया के स्मृति उपयोग को देख सकूं और तुरंत यह निर्धारित कर सकूं कि कोई रिसाव है या नहीं। नहीं था वह अच्छा था; हालांकि, मैंने इसे अपने आवेदन में रखा और स्मृति उपयोग नहीं बदला (अभी भी लीक)। यह निश्चित रूप से इंगित करता है कि मेरे पास कहीं और रिसाव है :-(हालांकि, अगर मैं बस उस विधि के शीर्ष पर एक वापसी जोड़ता हूं, तो उपयोग स्थिर हो जाता है। इस पर कोई विचार? टाइमर-टिक-इनकोड कोड स्मृति को जमा नहीं करते हैं, लेकिन मेरा वास्तविक कोड (एक ही विधि) करता है। अंतर यह है कि मैं वास्तविक कोड में विभिन्न स्थानों से विधि को बुला रहा हूं। क्या कॉल का संदर्भ किसी भी तरह प्रभावित कर सकता है? (नोट, अगर यह नहीं है पहले से ही स्पष्ट नहीं है, मैं किसी भी माध्यम से .NET विशेषज्ञ नहीं हूं) ...

+0

वहाँ एक कारण है कि आप एक पाठ बॉक्स का उपयोग करने और एक डेटाबेस में इस लॉग इन करें या एक घटना लॉग इन करने के लिए इसे बाहर नहीं लिख कोशिश कर रहे हैं है: टेक्स्ट संलग्न करने का एक सरल कार्य का उपयोग ould? – Thyamine

+0

यह एएसपी.नेट में एक आम समस्या है, क्योंकि मल्टीलाइन टेक्स्ट बॉक्स क्लाइंट-साइड को 'टेक्सटेरिया' एचटीएमएल नियंत्रण के रूप में प्रस्तुत किया जाता है, जो खुशी से अधिकतम लम्बाई जैसे गुणों को अनदेखा करता है। मुझे लगता है कि यह Winforms है, हालांकि? – MusiGenesis

+0

थाइमाइन .. कारण सादगी है। मैं सिर्फ एक कार्यक्रम के कुछ रनटाइम ट्रेस देखने में सक्षम होना चाहता हूं; और मैं उम्मीद कर रहा था कि AppendText() ने फीफो की तरह अभिनय किया था। –

उत्तर

2

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

+0

मैंने अभी इसका परीक्षण किया है। टेक्स्टबॉक्स में अंतर्निहित स्ट्रिंग प्रॉपर्टी अधिकतम लम्बाई संपत्ति के बावजूद पूर्ण स्ट्रिंग देता है। –

+0

यह मुझे आश्चर्यचकित करता है। मैं यह अनुमान लगा रहा था कि आकार के रूप में अधिकतम लंबाई का उपयोग करके, एपेंडटेक्स्ट को फीफो मोड में डालने का कोई तरीका होना चाहिए। –

+0

@Ed - यकीन है कि एक तरीका है - मैंने सुझाव दिया और @ वरुण चटर्जी ने अपने जवाब में लागू किया :) लेकिन ऐसा करने के तरीके में कोई भी निर्मित नहीं हुआ। – Andrey

2

आप सी

int maxLength = 256; 
private void AppendText(string text) 
{ 
    textBox1.AppendText(text); 
    if(textBox1.Text.Length > maxLength) 
     textBox1.Text = textBox1.Text.Substring(textBox1.Text.Length - maxLength); 
} 
+0

यह काम करता है लेकिन यह निश्चित रूप से बहुत सारे काम की तरह लगता है, खासकर जब मैं इस तथ्य को जोड़ता हूं कि मुझे प्रत्येक बार अधिकतम लम्बाई तक पहुंचने के लिए नीचे स्क्रॉल करने के लिए टेक्स्टबॉक्स की आवश्यकता होती है। धन्यवाद! लेकिन मैं उम्मीद कर रहा था कि एक बेहतर तरीका था। –

+0

इस पोस्ट के शीर्ष पर मेरा जोड़ा गया टेक्स्ट देखें .... –

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