प्रश्न पढ़ने से पहले:
यह प्रश्न इस बात के बारे में नहीं है कि dynamic_cast
का उपयोग करना कितना उपयोगी है। यह सिर्फ इसके प्रदर्शन के बारे में है।गतिशील_कास्ट का प्रदर्शन?
मैंने हाल ही में एक डिज़ाइन विकसित किया है जहां dynamic_cast
बहुत उपयोग किया जाता है।
सहकर्मियों के साथ चर्चा करते समय लगभग हर कोई कहता है कि dynamic_cast
का उपयोग अपने खराब प्रदर्शन के कारण नहीं किया जाना चाहिए (ये सहकर्मी हैं जिनके पास अलग-अलग पृष्ठभूमि हैं और कुछ मामलों में एक-दूसरे को नहीं पता। मैं एक में काम कर रहा हूं विशाल कंपनी)
मैंने केवल इस पर विश्वास करने के बजाय इस विधि के प्रदर्शन का परीक्षण करने का फैसला किया।
निम्न कोड इस्तेमाल किया गया था:
ptime firstValue(microsec_clock::local_time());
ChildObject* castedObject = dynamic_cast<ChildObject*>(parentObject);
ptime secondValue(microsec_clock::local_time());
time_duration diff = secondValue - firstValue;
std::cout << "Cast1 lasts:\t" << diff.fractional_seconds() << " microsec" << std::endl;
ऊपर कोड boost::date_time
लिनक्स पर से तरीकों का उपयोग करता प्रयोग करने योग्य मूल्यों को प्राप्त करने के लिए।
मैंने एक निष्पादन में 3 dynamic_cast
किया है, उन्हें मापने के लिए कोड समान है।
1 निष्पादन के परिणाम थे निम्नलिखित:
Cast1 रहता है: 74 माइक्रोसेक
Cast2 रहता है: 2 माइक्रोसेक
Cast3 रहता है: 1 माइक्रोसेक
पहले डाली हमेशा ले लिया 74-111 माइक्रोसेक, निम्नलिखित एक ही निष्पादन में रहता है 1-3 microsec लिया।
तो आखिर में मेरे प्रश्न:
dynamic_cast
वास्तव में खराब प्रदर्शन कर रहा है?
टेस्ट्रेसल्ट के मुताबिक नहीं। क्या मेरा टेस्टकोड सही है?
इतने सारे डेवलपर्स क्यों सोचते हैं कि यह धीमा है यदि यह नहीं है?
क्या मुझे कुछ याद आ रही है? मैं cast2 या cast3 के लिए कोई कोड नहीं देख सकता। – Flexo
कौन कह सकता है कि क्या बुरा है? क्या आपका कार्यक्रम बिल्कुल अच्छा प्रदर्शन करता है? यदि ऐसा है, तो प्रदर्शन खराब नहीं है। क्या गतिशीलता में कुल समय आपके निष्पादन समय का एक बड़ा प्रतिशत है? यदि नहीं, तो पहले अन्य चीजों के बारे में चिंता करें। अधिक आम तौर पर, कुछ अनुप्रयोगों के लिए 74 माइक्रोसॉन्ड बहुत धीमे होते हैं - मेरी आखिरी नौकरी में, मुझे स्टॉक एक्सचेंज से एक संपूर्ण अपडेट रिकॉर्ड प्राप्त होता और पार्स किया जाता था, डेटाबेस अपडेट किया गया था और आधे समय में इसके बारे में क्लाइंट ऐप्स को बताया था। यदि आप रुचि रखते हैं, तो उसी व्यवहार को प्राप्त करने के अन्य तरीकों से इसकी तुलना करें। –
कोड में बहुत से गतिशील_casts होने के कारण डिज़ाइन समस्याओं का एक निश्चित संकेतक है। –