की अवधि के लिए स्थैतिक बने गुणों का कंपाइलर ऑप्टिमाइज़ेशन मैं Improving .NET Application Performance and Scalability पढ़ रहा था।लूप
यदि आप डेटा कि पाश की अवधि के लिए स्थिर है का उपयोग करें, यह बजाय बार-बार एक क्षेत्र या संपत्ति तक पहुँचने का पाश से पहले प्राप्त: शीर्षक बचें दोहराए फील्ड या संपत्ति पहुँच खंड एक दिशानिर्देश शामिल हैं।
निम्नलिखित कोड इस का एक उदाहरण के रूप में दिया जाता है:
for (int item = 0; item < Customer.Orders.Count; item++)
{
CalculateTax(Customer.State, Customer.Zip, Customer.Orders[item]);
}
string state = Customer.State;
string zip = Customer.Zip;
int count = Customers.Orders.Count;
for (int item = 0; item < count; item++)
{
CalculateTax(state, zip, Customer.Orders[item]);
}
लेख राज्यों हो जाता है:
ध्यान दें कि यदि इन क्षेत्रों हैं, यह संकलक के लिए के लिए यह अनुकूलन automatica संभव हो सकता है lly। यदि वे गुण हैं, तो यह कम संभावना है। यदि गुण वर्चुअल हैं, तो यह स्वचालित रूप से नहीं किया जा सकता है।
इस तरह से संकलक द्वारा गुणों को अनुकूलित करने के लिए "बहुत कम संभावना" क्यों है, और जब किसी एक विशेष संपत्ति के लिए उम्मीद की जा सकती है या अनुकूलित नहीं किया जा सकता है? मैं मानता हूं कि उन गुणों जहां एक्सेसर्स में अतिरिक्त ऑपरेशन किए जाते हैं, संकलक को अनुकूलित करने के लिए कठिन होते हैं, और जो कि केवल बैकिंग फ़ील्ड को संशोधित करते हैं, उन्हें अनुकूलित करने की अधिक संभावना होती है, लेकिन कुछ और ठोस नियम पसंद करेंगे। क्या स्वत: कार्यान्वित गुण हमेशा अनुकूलित होते हैं?
और यहां तक कि अगर यह * बैकिंग फ़ील्ड का मान वापस करता है, तो संकलक को यह साबित करने की आवश्यकता होगी कि बैकिंग फ़ील्ड कभी भी पूरे लूप में नहीं बदल सकता है, और यह साबित करने के लिए एक कठिन (अक्सर असंभव) चीज है अधिकांश मामले। – Servy
@ सर्वी: हाँ, लेकिन मेरा मानना है कि लगभग एक ही मामला है 'ध्यान दें कि यदि ये फ़ील्ड हैं, तो यह संकलक स्वचालित रूप से इस अनुकूलन को करने के लिए संभव हो सकता है' –
यदि संकलक साबित कर सकता है कि संपत्ति * केवल * रिटर्न एक फ़ील्ड का मूल्य, * फिर * यह वही है। यह पता हो सकता है कि संपत्ति सिर्फ यही करती है या नहीं। – Servy