में बहुत सारी मेमोरी लेने वाली वस्तुओं की TStringList मैं सिमुलेशन प्रोग्राम पर काम कर रहा हूं।डेल्फी XE
प्रोग्राम की पहली चीजों में से एक को एक बड़ी फ़ाइल (28 एमबी, लगभग 79'000 लाइनों) में पढ़ा जाता है, प्रत्येक पंक्ति (लगभग 150 फ़ील्ड) पार्स, ऑब्जेक्ट के लिए कक्षा बनाएं, और इसे जोड़ें एक TStringList।
यह एक और फ़ाइल में भी पढ़ता है, जो दौड़ के दौरान अधिक वस्तुओं को जोड़ता है। अंत में, यह लगभग 85'000 वस्तुओं के समाप्त होता है।
मैं डेल्फी 2007 के साथ काम कर रहा था, और कार्यक्रम ने बहुत मेमोरी का उपयोग किया, लेकिन यह ठीक चला गया। मैंने डेल्फी एक्सई में अपग्रेड किया, और प्रोग्राम को माइग्रेट कर दिया और अब यह बहुत अधिक मेमोरी का उपयोग कर रहा है, और यह रन के माध्यम से आधा रास्ते मेमोरी से बाहर हो जाता है।
तो डेल्फी 2007 में, यह प्रारंभिक फ़ाइल में पढ़ने के बाद 1.4 गीगा का उपयोग कर समाप्त हो जाएगा, जो स्पष्ट रूप से एक बड़ी राशि है, लेकिन एक्सई में, यह लगभग 1.8 गीगा का उपयोग करके समाप्त होता है, जो वास्तव में बड़ा होता है और दौड़ने की ओर जाता है बाहर और त्रुटि हो रही
तो मेरे सवाल का
- यह इतना स्मृति क्यों उपयोग कर रहा है?
- 2007 से XE में इतनी अधिक स्मृति का उपयोग क्यों कर रहा है?
- मैं इसके बारे में क्या कर सकता हूं? मैं बदल सकते हैं नहीं कितना बड़ा या लंबे फ़ाइल है, और यह कहीं
धन्यवाद
क्या आप वाकई 1.4 और 2.8 नहीं हैं? –
यूनिकोडिंग AnsiString से बड़ा है। यह टीस्ट्रिंगलिस्ट वर्ग के आधार पर है। – RBA
जब तक कि आप 64 बिट प्रक्रियाओं का पूरी तरह से उपयोग करने पर भरोसा नहीं कर सकते हैं, आपको स्मृति को अधिक फ्रगल रूप से उपयोग करने के लिए अपने ऐप को फिर से डिजाइन करना चाहिए। 1.4 जीबी पर भी आप 32 बिट सिस्टम पर एड्रेस स्पेस की सीमाओं को दबाएंगे। –