2011-09-12 10 views
5

मैं डेल्फी का उपयोग कर एक लॉगर/स्निफर विकसित कर रहा हूं। ऑपरेशन के दौरान मुझे डेटा की मात्रा मिलती है, जो तनाव संचालन के दौरान लगभग 3 जीबी डेटा तक जमा हो सकती है। कुछ कंप्यूटरों पर जब हम उन स्तरों पर जाते हैं तो एप्लिकेशन कार्य करना बंद कर देता है और कभी-कभी अपवाद फेंकता है।उच्च वॉल्यूम लॉगर एप्लिकेशन के लिए उपयोग करने के लिए आवंटित विधि क्या है?

वर्तमान में मैं प्रत्येक संदेश में पॉइंटर आवंटित करने के लिए GetMem फ़ंक्शन का उपयोग कर रहा हूं।

क्या मेमोरी आवंटित करने का कोई बेहतर तरीका है ताकि मैं विफलता की संभावना को कम कर सकूं? ध्यान रखें कि मैं आकार को एक कठिन सीमा तक सीमित नहीं कर सकता।

हेपअलोक, वर्चुअलअलोक या यहां तक ​​कि मैप की गई फ़ाइलों का उपयोग करने के बारे में आप क्या सोचते हैं? कौन सा बेहतर होगा?

धन्यवाद।

+1

क्या आप मौजूदा फ़्लूम [https://cwiki.apache.org/FLUME/) जैसे मौजूदा उच्च वॉल्यूम लॉगर का उपयोग कर सकते हैं? – Barend

+1

कम मेमोरी आवंटित करें या 64 बिट डेल्फी –

+0

पर स्विच करें @ बेरेंड यह रीयलटाइम इन-हाउस लॉगर है जो हमारी सभी प्रक्रियाओं से जानकारी प्राप्त करता है + यूएसबी डेटा (मेरी कंपनी सेल फोन के साथ काम करती है और संचार के दौरान सभी यूएसबी पैकेट लॉगर में जोड़ दी जाती है) । मुझे नहीं लगता कि तैयार किए गए लॉगर सही तरीके से इसे संभालने में सक्षम होंगे। – Ran

उत्तर

5

आपकी मूल समस्या 32 बिट प्रक्रियाओं के लिए 4 जीबी की हार्ड एड्रेस स्पेस सीमा है। चूंकि आप 3 जीबी पर समस्याएं मार रहे हैं, मैं केवल यह मान सकता हूं कि आप 0 बिट64 बिट विंडोज या 32 बिट विंडोज़/3 जीबी बूट स्विच के साथ चल रहे हैं।

मुझे लगता है कि आप सहित, लेकिन निम्न तक सीमित नहीं कुछ ही विकल्प, है:

  1. उपयोग कम स्मृति। शायद आप छोटे हिस्सों में संसाधित कर सकते हैं या डिस्क में से कुछ मेमोरी को धक्का दे सकते हैं।
  2. 64 बिट डेल्फी (अभी जारी) या फ्रीपास्कल का उपयोग करें। यह आपको पता स्थान की बाधा से मुक्त करता है लेकिन आपको विंडोज़ के 64 बिट संस्करणों तक सीमित करता है।
  3. मेमोरी मैप की गई फ़ाइलों का उपयोग करें। बहुत सारी मेमोरी वाली मशीन पर यह ओएस मेमोरी कैश तक पहुंच प्राप्त करने का एक तरीका है। मेमोरी मैप की गई फाइलें बेहोश दिल के लिए नहीं हैं।

मैं समाधान पर निश्चित रूप से सलाह नहीं दे सकता क्योंकि मुझे आपकी वास्तुकला नहीं पता है, लेकिन मेरे अनुभव में, आपकी मेमोरी पदचिह्न को कम करना अक्सर सबसे अच्छा समाधान होता है।

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

+3

मेमोरी मैप की गई फ़ाइलें आगे बढ़ने का एक तरीका हो सकती हैं, लेकिन आप अधिकतम संभव आवंटित कर सकते हैं। और आपके पास> 3 जीबी के लिए जटिल मैपिंग होगी। यह मुझे मारता है कि मेमोरी आवश्यकता को कम करने के लिए लॉग संदेशों को टोकन करना सबसे अच्छा विकल्प होगा। तो आपके पास "त्रुटि" और "प्रारंभ" और "खोलने" को एक बाइट में कम किया जा सकता है - यह सामान्य बातों को पूरा करने के लिए कुछ स्थिर विश्लेषण ले सकता है, लेकिन आवश्यकता को जल्दी से कम कर सकता है। – mj2008

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