डेटाटेबल लूप प्रदर्शन तुलना

निम्नलिखित में से कौन सा सर्वश्रेष्ठ प्रदर्शन है?

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

विधि 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
}
0
ro fr bn

1 उत्तर

नहीं, यह ऐसा नहीं कर सकता क्योंकि एक मूल्य के लिए निरंतर समय के साथ व्यक्त करने का कोई तरीका नहीं है।

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

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

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

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

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


Edit: Re-read your post, and yes, you might see negligible performance gains for your two cases as well, because the JITter optimizes the code. The JITter might optimize your end-index read into a direct access to the variable inside the data table that contains the row count, and a memory read isn't all that expensive anyway. If, on the other hand, reading that property was a very expensive operation, you'd see a more noticable difference.

0
जोड़ा