2009-01-23 7 views
26

मैंने उन जगहों पर कुछ बार बूस्ट :: पूल के साथ खेला है जहां मुझे लगता है कि मैं बहुत सारी वस्तु "मंथन" के साथ ढेर को गंभीरता से मार रहा था। आम तौर पर मैंने boost::object_pool, या boost::pool_alloc को एसटीएल टेम्पलेट पैरामीटर के रूप में उपयोग किया है। हालांकि परिणाम हमेशा यह है कि प्रदर्शन लगभग अपरिवर्तित है, या काफी खराब है।क्या आपने कभी बढ़ावा :: पूल का उपयोग करके एक महत्वपूर्ण गति प्राप्त की है?

मैं इसके साथ किसी भी सफल कहानियों को सुनने के लिए उत्सुक हूं।

मुझे प्रोफाइलिंग आउटपुट में किस तरह की चीजों की तलाश करनी चाहिए जो बढ़ावा दे सकता है :: पूल की मदद करने की संभावना है?

क्या यह वास्तव में पुराने पुराने मॉलोक पर सुधार करना बहुत मुश्किल है?

उत्तर

20

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

प्रकार में, यह लग रहा है जैसे अपने अनुप्रयोगों स्मृति पूल

+0

वैसे इसने वास्तव में प्रश्न का उत्तर दिया (हालांकि मैं इस मामले में समयपूर्व अनुकूलन का दोषी हूं, जैसा कि अन्य उत्तरों द्वारा उल्लेख किया गया है)। – timday

3

आप इसके लिए अनुकूलित करने से पहले स्मृति आवंटन में अपनी प्रदर्शन समस्याओं को ट्रैक करना चाहते हैं।

तो, समस्या के स्थान को इंगित करने के लिए अपनी प्रोफाइलिंग को सीमित करें। यह एक ही कोड पर बहुत सी कॉल हो सकती है जो केवल एक बार कॉल होने पर अधिक समय नहीं ले सकती है।

10

अंधेरे अनुकूलन अच्छे नहीं हैं। Google मेमोरी आवंटक का उपयोग करने का प्रयास करें, आपको अपने एप्लिकेशन को पुन: संकलित करने की भी आवश्यकता नहीं है। आप पा सकते हैं क्या तुम यहाँ में पता करने की जरूरत:

http://google-perftools.googlecode.com/svn/trunk/doc/tcmalloc.html

गेटैनो

+0

पॉइंटर के लिए धन्यवाद। जिन चीज़ों के साथ मैं खेल रहा था उनमें से एक थ्रेड-विशिष्ट मेमोरी पूल था, लेकिन टीसीएमएलोक उन्हें प्राप्त करने के क्लीनर तरीके की तरह दिखता है। – timday

16

हाँ, 500% की गति में वृद्धि का उपयोग कर वारंट नहीं करते। आवेदन (बल्कि बेवकूफ, लेकिन कभी-कभी आपको जो मिला है उसके साथ काम करना पड़ता है) 1 std :: map से दूसरे लूप में तत्वों की प्रतिलिपि बनाते हैं (लूप में कुछ निर्णय लेते थे), और बहुप्रचारित/प्रक्रिया सर्वर पर परिणामी आवंटन परिणामस्वरूप ढेर विवाद। मैंने बूस्ट पूल को दूसरे मानचित्र पर एक आवंटक के रूप में जोड़ा और परिणाम निष्पादन गति में 500% की वृद्धि हुई।

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