2011-11-05 9 views
19

मैं System.Runtime.Caching.MemoryCache द्वारा प्रदान किए गए कैश का उपयोग कर रहा हूं।क्या मैं .NET4 मेमोरी कैश पर पुन: प्रयास कर सकता हूं?

मैं कैश के आइटम से अधिक की गणना करने में इतना है कि मैं (तब फिर से लोड को बेदखल) लेकिन जैसे

foreach (var item in MemoryCache.Default) { item.invalidate() } 

आइटम सरकारी डॉक्स को अमान्य कर सकते हैं करना चाहते हैं found here राज्य:

महत्वपूर्ण: मेमोरी कैश इंस्टेंस के लिए एक गणनाकर्ता को पुनर्प्राप्त करना संसाधन-गहन और अवरोधन ऑपरेशन है। इसलिए, गणनाकर्ताओं को उत्पादन अनुप्रयोगों में उपयोग नहीं किया जाना चाहिए।

निश्चित रूप से कैश के सामानों को फिर से शुरू करने के लिए एक सरल और कारगर तरीका होना चाहिए?

+0

शायद आपको किसी भी तरह से पता होना चाहिए कि कैश में क्या चीजें हैं ... लेकिन इसका मतलब एक सरणी या कुछ का उपयोग करना होगा। – sinni800

+0

हाँ, मैं यही कर रहा हूं, लेकिन यह पागल है क्योंकि इसका मतलब है कि मैं ट्रैकिंग कर रहा हूं कि कैश पहले से ही ट्रैकिंग कर रहा है! :) –

+0

बिल्कुल। लेकिन यदि कैश में बड़ी मात्रा में डेटा और आपकी सरणी केवल उस डेटा को प्राप्त करने के लिए जानकारी रखती है जो उस डेटा को अच्छी तरह से रखती है। – sinni800

उत्तर

9

अब तक किए गए सुझाव बहुत अच्छे हैं, लेकिन मेरी आवश्यकता अभी भी बताई गई है: कैश के आइटम पर फिर से शुरू करने के लिए। ऐसा लगता है कि यह इतना आसान काम है, और मुझे उम्मीद है कि कैश में आंतरिक रूप से कुछ प्रकार की सूची संरचना है। MemoryCache के लिए दस्तावेज़ और सुविधा सेट चाहते हैं।

इसलिए ऊपर चर्चा के अनुसार, मैंने अपने कैश एडाप्टर क्लास में एक सूची जोड़ा है, जिसमें कैश में रखे गए प्रत्येक आइटम का संदर्भ है। अगर मुझे कैश पर फिर से चलने की ज़रूरत है - न केवल अमान्यता के लिए, बल्कि आंकड़े इकट्ठा करने के लिए, आदि .-- फिर मैं अपनी सूची में फिर से शुरू करता हूं।

यदि कैश में रखी गई वस्तुओं की संख्या बदलती नहीं है, तो यह एक उचित समाधान है। यदि संख्या बदलती है, तो आपको एडाप्टर क्लास के माध्यम से सम्मिलित/निकालना होगा, ताकि सूची को वास्तविक कैश के साथ सिंक में रखा जा सके। गन्दा लेकिन यह काम करता है, और दस्तावेज़ों में उल्लिखित पर्फ जुर्माना से बचाता है।

उम्मीद है कि MemoryCache कैश प्रदाता अगले प्लेटफ़ॉर्म रिलीज में fleshed-out होगा।

+0

हे, मैं बहुत धीमी थी :)। कोई चिंता नहीं! – sinni800

+1

मुझे अंततः एहसास हुआ कि कक्षा किस तरह से लिखी गई थी। कैश पर फिर से चलने पर, आपको दौड़ की स्थिति का सामना करना पड़ सकता है क्योंकि पुनरावृत्ति के दौरान एक वस्तु को बेदखल कर दिया जाता है! तो आपको कैश को लॉक करने की आवश्यकता है। लेकिन, यदि आपके पास उपयोग केस है, जैसा कि मैंने किया था, जहां आप आइटम को कभी समाप्त नहीं होने के लिए सेट करते हैं, तो यह लागू नहीं है (निश्चित रूप से कम स्मृति की वजह से मेरे आइटम को बेदखल किया जा सकता है, लेकिन यदि आपका कैश छोटा है और आप आधुनिक सर्वर का उपयोग कर रहे हैं)। –

+0

अधिक नोट्स। यह मुझे सोच रहा है कि मेरा समाधान वास्तव में काफी खतरनाक * और संभवतः बेवकूफ है। यह perf हिट को स्वीकार करने के लिए और अधिक समझदार है, और मेमोरी कैश को पुनरावृत्ति के दौरान लॉक करने की अनुमति देता है - या अपने सभी आइटमों को अमान्य करने के लिए किसी अन्य तरीके का उपयोग करने के लिए। यदि कैश को अक्सर अमान्य नहीं किया जाता है, तो बस ठीक है कि सिर्फ perf हिट के साथ रहें: बस कैश को गर्म करने में लगने वाले समय के बारे में सोचें - पूरी चीज़ को अमान्य करना कोई अलग नहीं है। फिर भी, दस्तावेज़ चेतावनी देते हैं कि उत्पादन कोड में गणनाकर्ता का उपयोग न करें: मुझे आश्चर्य है क्यों? शायद ऐसे अन्य मुद्दे हैं जिनके बारे में मुझे पता नहीं है? –

1

ChangeMonitors का उपयोग करने पर विचार करें, जो आपको कुछ शर्तों को पूरा होने पर स्वचालित प्रविष्टियों को स्वचालित रूप से बेदखल करने की अनुमति देता है।

Is there some sort of CacheDependency in System.Runtime.Caching?

यह System.Web.Caching CacheDependencys, जो आप प्रविष्टियों को बेदखल करने की जब फ़ाइलें या अन्य कैश प्रविष्टियों को बदलने की अनुमति देने के समान है देखें।

-2

2014 में,

यह सभी आइटम पाने के लिए सही तरीका है:

Dim AllItems = MemoryCache.Default.Select(Of ItemType)(Function(O) O.Value)

आशा इस कोई मदद करता है।

+2

डाउनवोट। यह कैश आइटमों को 'गणना' जैसा ही है जो आधिकारिक दस्तावेज से ओपी राज्यों को 'संसाधन-केंद्रित' है और इससे बचा जाना चाहिए। देखें [गणना के साथ समस्या] (http://stackoverflow.com/a/22388943/219516)। – publicgk

+0

क्षमा करें @publicgk मैंने पूरी तरह से प्रश्न नहीं पढ़ा। – Dejisys

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

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