2011-02-28 11 views
5

यह सिर्फ एक सैद्धांतिक प्रश्न हो सकता है लेकिन मैं इसे एक संतोषजनक उत्तर नहीं मिला हूं।कोड निष्पादन के दौरान कैश (या अन्य चर) बदल सकते हैं?

मैं अपनी साइटों में से एक पर कैश का उपयोग कर रहा हूं जिसने मुझे इसके डेटा के बारे में सोचने और कब और यदि यह बदल दिया है। क्या कुछ कोड के निष्पादन के दौरान कैश बदल सकता है?

यहाँ एक उदाहरण

if (Cache["name"] != null) { 

    // Long and heavy code execution done here 

    if (Cache["name"] == null) Response.Write("Lost the data"); 
} 

है सकते हैं प्रक्रिया है कि इसके बाद के संस्करण कोड के साथ कैश रन समानांतर बदलने के लिए या जब तक यह समाप्त हो गया है यह प्रतीक्षा करता है?
क्या कोई सैद्धांतिक मौका है कि यह "डेटा खो गया" प्रिंट करेगा?

यदि हाँ, यह हमेशा चर पहले या हमेशा अशक्त और कभी नहीं नहीं अशक्त के लिए जाँच को बचाने के लिए अच्छा अभ्यास है?

अग्रिम धन्यवाद!

/निकलास

उत्तर

4

बिल्कुल यह कर सकता है।

कैश से हमेशा स्नैपशॉट मूल्यों, और काम स्नैपशॉट के साथ:

var snapshot = Cache["name"]; 
if(snapshot != null) {...} 

और प्रयोग snapshot भर। जब थ्रेडिंग की बात आती है, तो ऊपर आमतौर पर एक सैनी दृष्टिकोण है; एकमात्र चेतावनी है कि आप Interlocked को कई विधियों के लिए देखना चाहते हैं जो आपको देख सकें (सुरक्षित रूप से) कि जब आप नहीं देख रहे थे तो एक चर/क्षेत्र बदल गया था, और केवल उस परिवर्तन को लागू करें जो इसे नहीं बदला था।

+0

मार्क, क्योंकि आप यहां हैं। क्या आप आरबीएसी पर अपनी आखिरी टिप्पणी का जवाब देंगे कि आपने मुझे इस शुक्रवार = के साथ मदद की है?)? – Niklas

0

यह निश्चित रूप से समाप्त हो सकता है ताकि इसका उपयोग करने से पहले शून्य के लिए जांच की जानी चाहिए। और जैसा कि आपने कहा है कि एक सहेजी गई प्रतिलिपि को काम पर रखने के लिए अच्छा है।

संबंधित मुद्दे