2012-10-22 35 views
5

लिंककैड में पुन: पूछताछ के प्रश्नों के बीच कौन सी स्थिति बचाई गई है? मैंने किसी को भी नहीं माना, इसलिए यदि आप दो बार एक स्क्रिप्ट चलाते हैं तो यह दोनों बार एक ही परिणाम होगा।लिंककैड में पुन: पूछताछ के प्रश्नों के बीच कौन सी स्थिति बचाई गई है?

हालांकि उसी लिंकपैड टैब में दो बार नीचे सी # प्रोग्राम चलाएं। आपको सबसे पहले यह एक खाली सूची मुद्रित करेगा, दूसरी बार संदेश 'हे' के साथ एक सूची। क्या चल रहा है?


System.ComponentModel.TypeDescriptor.GetAttributes(typeof(String)).OfType<ObsoleteAttribute>().Dump(); 
System.ComponentModel.TypeDescriptor.AddAttributes(typeof(String),new ObsoleteAttribute("hey")); 

उत्तर

10

LINQPad, प्रश्नों के बीच आवेदन डोमेन कैश जब तक आप संपादित में अन्यथा का अनुरोध | प्राथमिकताएं (या ऐप डोमेन को साफ़ करने के लिए Ctrl + Shift + F5 दबाएं)। इसका मतलब है कि स्थैतिक चर में संग्रहीत कुछ भी प्रश्नों के बीच संरक्षित किया जाएगा, मानते हैं कि प्रकार संख्यात्मक रूप से समान हैं। यही कारण है कि आप अपने कोड में अतिरिक्त प्रकार की वर्णन विशेषता देख रहे हैं, और यह भी बताते हैं कि आप अक्सर बाद के क्वेरी रनों पर प्रदर्शन लाभ क्यों देखते हैं (क्योंकि कई चीजें स्थिर चर में एक या दूसरे तरीके से कैश की जाती हैं)।

आप स्पष्ट रूप से LINQPad का कैश विस्तार विधि के साथ इस का लाभ ले सकते:

var query = <someLongRunningQuery>.Cache(); 
query.Select (x => x.Name).Dump(); 

कैश() एक पारदर्शी विस्तार विधि देता है कि यह वास्तव में क्या करता है, तो इनपुट पहले से ही एक पूर्व क्वेरी में नहीं देखा गया था तंग आ गया था है । अन्यथा, यह पिछली क्वेरी से अनुमानित परिणाम देता है।

इसलिए यदि आप दूसरी पंक्ति बदलते हैं और क्वेरी को दोबारा निष्पादित करते हैं, तो क्वेरी फिर से निष्पादित करने के बजाय कैश से आपूर्ति की जाएगी क्योंकि क्वेरी जल्दी से निष्पादित की जाएगी।