मैंने .NET 4.0 और एंटरप्राइज़ लाइब्रेरी कैशिंग ब्लॉक में system.runtime.caching के प्रदर्शन की तुलना की है और मेरे आश्चर्य से यह कैश आइटम्स से बड़े डेटा संग्रह प्राप्त करते समय तुलना में बहुत अधिक प्रदर्शन करता है।system.runtime.caching का प्रदर्शन
एंटरप्राइज़ लाइब्रेरी लगभग 0,15ms, 10000 ऑब्जेक्ट्स में लगभग 0,25ms में 100 ऑब्जेक्ट्स प्राप्त करती है। यह एक प्रक्रिया में कैश के लिए तेज़ और प्राकृतिक है क्योंकि वास्तव में कोई डेटा कॉपी करने की आवश्यकता नहीं है (केवल संदर्भ)।
.NET 4.0 कैशिंग लगभग 2500 में 100 ऑब्जेक्ट्स प्राप्त करता है, 10000 ऑब्जेक्ट्स लगभग 1500ms में! तुलना में यह बहुत धीमी है और इससे मुझे संदेह होता है कि कैशिंग को प्रक्रिया से बाहर किया जाता है।
क्या मुझे कुछ कॉन्फ़िगरेशन विकल्प याद आ रहा है, उदाहरण के लिए इन-प्रोसेस कैशिंग सक्षम करने के लिए, या एंटरप्राइज़ लाइब्रेरी कैशिंग ब्लॉक वास्तव में यह बहुत तेज है?
अद्यतन
यहाँ मेरी बेंचमार्क है:
पहले, मैं कैश (बेंचमार्क से अलग) के लिए डेटाबेस से डेटा लोड।
मैं तरीकों के चारों ओर एक टाइमर का उपयोग मिलीसेकेंड में समय को मापने के लिए:
EnterpriseLibrary कैशिंग
Microsoft.Practices.EnterpriseLibrary.Caching.CacheManager _cache;
public void InitCache(){
_cache = CacheFactory.GetCacheManager("myCacheName");
}
public void Benchmark(){
HighPerformanceTimer timer = new HighPerformanceTimer();
timer.Start();
myObject o = (myObject)_cache.GetData(myCacheKey);
timer.Stop();
Response.Write(timer.GetAsStringInMilliseconds());
}
.NET 4.0 कैशिंग
System.Runtime.Caching.MemoryCache _cache;
public void InitCache(){
_cache = new MemoryCache("myCacheName");
}
public void Benchmark(){
HighPerformanceTimer timer = new HighPerformanceTimer();
timer.Start();
myObject o = (myObject)_cache.Get(myCacheKey);
timer.Stop();
Response.Write(timer.GetAsStringInMilliseconds());
}
बेंचमार्क है ऑब्जेक्ट को सुनिश्चित करने के लिए औसत समय की गणना करने के लिए 1000 बार निष्पादित किया गया परीक्षण की विश्वसनीयता। टाइमर एक कस्टम टाइमर है जिसका उपयोग मैं करता हूं, किसी भी टाइमर गिनती मिलीसेकंड करना चाहिए।
दिलचस्प बात यह है कि "myObject" में कई संदर्भ हैं। यदि कोई धारावाहिक शामिल था तो मैं समझूंगा कि इस ऑब्जेक्ट के लिए प्रदर्शन अलग क्यों है (जैसे वितरित कैशिंग में), लेकिन ये इन-प्रोसेस कैश दोनों हैं जो सैद्धांतिक रूप से बिना किसी बड़े अंतर के काम करना चाहिए।
क्या आप मेमोरी कैश का उपयोग कर रहे हैं या अपने स्वयं के कार्यान्वयन का बेंचमार्क किया है? एमएसडीएन के अनुसार मेमोरी कैश असुरक्षित है। – ata
मैं किसी भी विशिष्ट विन्यास के बिना मेमोरी कैश का उपयोग कर रहा हूं। – Herber
क्या आप हमें अपना बेंचमार्क दिखा सकते हैं? –