2008-08-07 26 views
8

इनमें से कौन सा सर्वश्रेष्ठ प्रदर्शन है?डेटाटेबल लूप प्रदर्शन तुलना

मैं विधि दो विशाल प्रदर्शन लाभ के साथ जावास्क्रिप्ट में कार्यान्वित हालांकि, देखा है, मैं सी # में किसी भी लाभ को मापने के लिए असमर्थ था और अगर संकलक पहले से ही यहाँ तक कि जब विधि की तरह लिखा विधि 2 करता है सोच रहा था 1.

विधि 2 के पीछे सिद्धांत यह है कि कोड को डेटाटेबल तक पहुंचने की आवश्यकता नहीं है। पंक्तियां। प्रत्येक पुनरावृत्ति पर गणना करें, यह int c तक आसानी से पहुंच सकता है।

विधि 1

for (int i = 0; i < DataTable.Rows.Count; i++) { 
    // Do Something 
} 

विधि 2

for (int i = 0, c = DataTable.Rows.Count; i < c; i++) { 
    // Do Something 
} 

उत्तर

4

नहीं, यह नहीं कर सकता है कि के बाद से वहाँ एक मूल्य के लिए समय से अधिक निरंतर व्यक्त करने के लिए कोई रास्ता नहीं है।

यदि संकलक ऐसा करने में सक्षम होना चाहिए, तो उस मान को वापस करने वाले कोड से गारंटी होनी चाहिए जो मान स्थिर है, और लूप की अवधि के लिए नहीं बदलेगा।

लेकिन, इस मामले में, आप अपने लूप के हिस्से के रूप में डेटा तालिका में नई पंक्तियां जोड़ने के लिए स्वतंत्र हैं, और इस प्रकार यह सुनिश्चित करने के लिए आप उस पर निर्भर हैं, जिस तरह से आपने इसे किया है।

तो संक्षेप में, यदि संकलक एक चर के अलावा कुछ भी है तो संकलक उस अनुकूलन को नहीं करेगा।

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

निष्कर्ष: यदि आप जानते हैं, या स्वीकार करने के इच्छुक हैं, तो अंत लूप इंडेक्स लूप की अवधि के लिए स्थिर है, इसे एक चर में रखें।


संपादित करें: अपनी पोस्ट फिर से पढ़ा है, और हाँ, आप अपने दो मामलों के लिए नगण्य निष्पादन लाभ देख सकते हैं, क्योंकि घबराना कोड का अनुकूलन। जेआईटीटर आपके एंड-इंडेक्स को डेटा तालिका के अंदर चर के लिए सीधे पहुंच में पढ़ने के लिए अनुकूलित कर सकता है जिसमें पंक्ति गणना शामिल है, और एक मेमोरी रीड वैसे भी महंगा नहीं है। अगर, दूसरी तरफ, उस संपत्ति को पढ़ना एक बहुत महंगा ऑपरेशन था, तो आप एक और अधिक उल्लेखनीय अंतर देखेंगे।

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

  • कोई संबंधित समस्या नहीं^_^