2011-03-28 9 views
5

कल रात मैंने कुछ अनुरोध प्रसंस्करण करने के लिए अपना पहला IHttpModule लिखा था। मैं कच्चे यूआरएल का निरीक्षण करने के लिए नियमित अभिव्यक्ति का उपयोग कर रहा हूं। IHttpModule प्रत्येक अनुरोध पर बुलाया जाएगा, इसलिए प्रत्येक अनुरोध पर इसे बनाने से रोकने के लिए नियमित अभिव्यक्ति ऑब्जेक्ट के कुछ प्रकार के कैशिंग करना उचित लगता है।बेहतर क्या है: HttpContext.Current.Cache या केवल एक स्थिर के माध्यम से कैशिंग?

अब मेरा प्रश्न ... बेहतर क्या है: तत्काल ऑब्जेक्ट को स्टोर करने के लिए HttpContext.Current.Cache का उपयोग करें या मेरे मॉड्यूल में private static Regex का उपयोग करें?

मैं कारणों की प्रतीक्षा कर रहा हूं। बस स्पष्ट करने के लिए: regex कभी नहीं बदलेगा और इस तरह हमेशा एक ही बात हो।

उत्तर

11

regex तो बदलने के लिए नहीं जा रहा है, तो है (और यह आमतौर पर नहीं है),:

private static readonly Regex pattern = new Regex("...", RegexOptions.Compiled); 

सबसे तेज और हर तरह

+0

लेकिन क्या प्रक्रिया को पुन: उपयोग करने पर 'पैटर्न' शून्य होने का जोखिम नहीं है? – Aliostad

+3

@Aliostad - नहीं। चूंकि यह कक्षा की स्थिर संपत्ति है, इसलिए कक्षा का पहला संदर्भ होने पर इसे फिर से बनाया जाएगा। – tvanfosson

+0

हां, आप सही हैं। धन्यवाद। वास्तव में जादू 'readonly' है! – Aliostad

3

मैं इसे निर्भर करता है लगता है में सबसे कारगर है। कैश में निर्मित आपको स्वचालित समाप्ति नियंत्रण प्रदान कर सकता है जबकि स्थैतिक वस्तुएं नहीं हो सकती हैं। साथ ही, यदि आप कैश तंत्र को बदलना चाहते हैं (मान लें कि आपको अपना आवेदकॉन वितरित करना है) तो आप कैश में निर्मित कर सकते हैं। स्थिर वस्तुएं बस स्थिर हैं।

+1

जबकि सच है, एक साधारण रेगेक्स के लिए ऐसी चिंताओं आमतौर पर –

+1

@Marc - मैं आगे जाऊंगा और कहूंगा कि यह एक कोड गंध है (सट्टा सामान्यता?) । आपने एक निर्भरता बनाई है जिसे अस्तित्व की आवश्यकता नहीं है, यानी, एक स्थिर संपत्ति क्या होनी चाहिए अब एक असंबंधित वर्ग में डेटा है। – tvanfosson

3

मैं एक नियम के रूप में एक स्थिर क्षेत्र का उपयोग करता हूं और जब आपको ऑब्जेक्ट के जीवनकाल के अधिक नियंत्रण की आवश्यकता होती है तो कैशिंग को सहेजते हैं। यहाँ दो कारणों से मैं सही आगे के बारे में सोच सकते हैं:

  • वहाँ हमेशा कुछ भूमि के ऊपर वस्तु कैशिंग और कैश से यह पुन: प्राप्त करने में शामिल है, कम से कम वहाँ मुक्केबाजी/unboxing
  • आप पहुँच करना होगा किया जाएगा एक कैश कुंजी से नहीं बल्कि सीधे से कोड में आइटम, इस को समझने के लिए

आवेदन कुछ हद तक bulkier और अधिक कठिन बना देता है आप अपने आप से पूछना चाहिए अगर आप जरूरत कार्यक्षमता आप वस्तु कैशिंग द्वारा मिलता है, यानी जीवन भर।

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