2011-05-12 19 views
32

मुझे समझ में आता है कि .NET 4 फ्रेमवर्क में कैशिंग समर्थन बनाया गया है। क्या किसी के पास इसका कोई अनुभव है, या इसके बारे में अधिक जानने के लिए अच्छे संसाधन प्रदान कर सकते हैं?.NET 4 कैशिंग समर्थन

मैं स्मृति में वस्तुओं (मुख्य रूप से इकाइयों) की कैशिंग, और शायद सिस्टम का उपयोग कर रहा हूं। रनटाइम। कैशिंग।

+10

क्या कैशिंग? क्या आप एंटिटी फ्रेमवर्क, डब्ल्यूसीएफ या एप्लिकेशन सर्वर का जिक्र कर रहे हैं? – weismat

+0

'System.Runtime.Caching' स्पष्ट रूप से ;-) – Jodrell

+0

यदि आपको अभी तक .NET 4.5 में अपग्रेड नहीं किया गया है, तो आपको निम्न बग से अवगत होना चाहिए: http://stackoverflow.com/a/15715990/13087 – Joe

उत्तर

27

मुझे लगता है कि आप this, System.Runtime.Caching पर System.Web.Caching और अधिक सामान्य नामस्थान में मिल रहे हैं।

http://deanhume.com/Home/BlogPost/object-caching----net-4/37

और ढेर पर,

is-there-some-sort-of-cachedependency-in-system-runtime-caching और,

performance-of-system-runtime-caching देखें।

उपयोगी हो सकता है।

2

आशा है कि आप .NETFramework की System.Runtime.Caching की बात कर रहे 4.0

लिंक नीचे अच्छा प्रारंभिक बिंदु है: Here

15

मैं अपने आप को इसके बारे में उपयोग नहीं किया है, लेकिन अगर आप ' स्मृति में सरल वस्तुओं को कैश कर रहे हैं, आप संभवतः सिस्टम में MemoryCache कक्षा का जिक्र कर रहे हैं। रनटाइम। कैशिंग नामस्थान। पृष्ठ के अंत में इसका उपयोग करने का एक छोटा सा उदाहरण है।

संपादित करें: ऐसा लगता है कि मैंने वास्तव में इस उत्तर के लिए कुछ काम किया है, यहां उस पृष्ठ का नमूना है! :)

private void btnGet_Click(object sender, EventArgs e) 
{ 
    ObjectCache cache = MemoryCache.Default; 
    string fileContents = cache["filecontents"] as string; 

    if (fileContents == null) 
    { 
     CacheItemPolicy policy = new CacheItemPolicy(); 

     List<string> filePaths = new List<string>(); 
     filePaths.Add("c:\\cache\\example.txt"); 

     policy.ChangeMonitors.Add(new 
     HostFileChangeMonitor(filePaths)); 

     // Fetch the file contents. 
     fileContents = 
      File.ReadAllText("c:\\cache\\example.txt"); 

     cache.Set("filecontents", fileContents, policy); 
    } 

    Label1.Text = fileContents; 
} 

क्योंकि यह पता चलता है कि आप बहुत क्लासिक ASP.NET कैश में की तरह, कैश करने के लिए निर्भरता आवेदन कर सकते हैं यह दिलचस्प है। यहां बड़ा अंतर यह है कि आपके पास System.Web असेंबली पर निर्भरता नहीं है।

+1

मैंने इसका उपयोग किया है और दस्तावेज की कमी होने के लिए पाया है। यह मेरी समझ है कि आप इसे मूल रूप से उसी तरह उपयोग कर सकते हैं जैसे आप System.Web कैशिंग करेंगे। – goalie7960

4

फ्रेमवर्क में मेमोरी कैश शुरू करने के लिए एक अच्छी जगह है, लेकिन आप LazyCache पर भी विचार करना चाहेंगे क्योंकि इसमें मेमोरी कैश की तुलना में एक सरल एपीआई है और लॉकिंग के साथ-साथ कुछ अन्य अच्छी सुविधाएं भी बनाई गई हैं। यह nuget पर उपलब्ध है: PM> Install-Package LazyCache

// Create our cache service using the defaults (Dependency injection ready). 
// Uses MemoryCache.Default as default so cache is shared between instances 
IAppCache cache = new CachingService(); 

// Declare (but don't execute) a func/delegate whose result we want to cache 
Func<ComplexObjects> complexObjectFactory =() => methodThatTakesTimeOrResources(); 

// Get our ComplexObjects from the cache, or build them in the factory func 
// and cache the results for next time under the given key 
ComplexObject cachedResults = cache.GetOrAdd("uniqueKey", complexObjectFactory); 

मैं हाल ही में getting started with caching in dot net है कि आप उपयोगी मिल सकता है के बारे में इस लेख लिखा था।

(अस्वीकरण: मैं LazyCache का लेखक हूं)