public IEnumerable<ModuleData> ListModules()
{
foreach (XElement m in Source.Descendants("Module"))
{
yield return new ModuleData(m.Element("ModuleID").Value);
}
}
प्रारंभ में उपर्युक्त कोड बहुत अच्छा है क्योंकि यदि आवश्यक नहीं है तो पूरे संग्रह का मूल्यांकन करने की आवश्यकता नहीं है।कैशिंग आईन्यूमेरेबल
हालांकि, एक बार सभी मॉड्यूल एक बार प्रगणित किया गया है, इसे और अधिक महंगा हो जाता है बार-बार XDocument क्वेरी करने के लिए जब वहाँ कोई बदलाव नहीं आया है।
तो, एक प्रदर्शन में सुधार के रूप में:
public IEnumerable<ModuleData> ListModules()
{
if (Modules == null)
{
Modules = new List<ModuleData>();
foreach (XElement m in Source.Descendants("Module"))
{
Modules.Add(new ModuleData(m.Element("ModuleID").Value, 1, 1));
}
}
return Modules;
}
कौन सा महान है अगर मैं बार-बार पूरी सूची लेकिन अन्यथा इतना महान नहीं उपयोग कर रहा हूँ।
वहाँ एक मध्यम जमीन है, जहां मैं वापसी उपज कर सकते हैं जब तक पूरी सूची दोहराया कर दिया गया है, तो यह कैश और बाद में अनुरोध करने के लिए कैश की सेवा है?
क्या मुझे sth मिल रहा है। गलत? आपका कोड ठीक वही करता है जो आप पूछते हैं ... –
दूसरा कोड ब्लॉक हमेशा संपूर्ण गणना को फिर से सक्रिय करेगा, भले ही ऐसा करने की आवश्यकता न हो। – djskinner