Czytałem Improving .NET Application Performance and Scalability. Sekcja zatytułowana uniknięcia powtarzania pola lub właściwości dostęp zawiera wytycznych:Optymalizacja kompilatora właściwości, które pozostają statyczne przez czas trwania pętli
Jeśli używasz danych jest stały przez cały czas trwania pętli uzyskania go przed pętlą zamiast wielokrotnie dostępu do pola lub właściwości.
Poniższy kod jest podany jako przykład w ten sposób:
for (int item = 0; item < Customer.Orders.Count; item++)
{
CalculateTax(Customer.State, Customer.Zip, Customer.Orders[item]);
}
staje
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]);
}
stanach artykułu:
pamiętać, że jeśli są to pola, to może być możliwe dla kompilatora do zrobić automatyczną optymalizację Lly. Jeśli są to właściwości, jest o wiele mniej prawdopodobne. Jeśli właściwości są wirtualne, nie można ich automatycznie wykonać.
Dlaczego jest "o wiele mniej prawdopodobne", aby właściwości zostały zoptymalizowane przez kompilator w ten sposób i kiedy można się spodziewać optymalizacji danej właściwości? Zakładam, że właściwości, w których dodatkowe operacje są wykonywane w akcesoriach, są trudniejsze do optymalizacji przez kompilator, i że te, które modyfikują tylko pole zaplecza, są bardziej prawdopodobnie zoptymalizowane, ale chciałbym jakieś bardziej konkretne reguły. Czy właściwości automatycznie wdrażane są zawsze zoptymalizowane?
Nawet jeśli * to * po prostu zwróci wartość pola podkładu, kompilator będzie musiał udowodnić, że pole podkładu nie może się zmienić w całej pętli, a to jest trudne (często niemożliwe) do udowodnienia w w większości przypadków. – Servy
@Servy: Tak, ale uważam, że jest to mniej więcej ten sam przypadek, co 'Zwróć uwagę, że jeśli są to pola, kompilator może automatycznie wykonać tę optymalizację' –
Jeśli kompilator może udowodnić, że właściwość * tylko * zwraca wartość pola, * następnie * jest taka sama. Może lub nie może wiedzieć, czy nieruchomość właśnie to robi. – Servy