मैं गिटहब पर एएसपी.नेट कोर के स्रोतों की खोज कर रहा था यह देखने के लिए कि एएसपी.नेट टीम किस तरह की चाल ढांचे को तेज करने के लिए उपयोग करती है। मैंने कुछ ऐसा देखा जो मुझे चिंतित करता था। ServiceProvider के स्रोत कोड, निपटान कार्यान्वयन में में, वे एक शब्दकोश की गणना, और वे एक प्रदर्शन चाल इंगित करने के लिए एक टिप्पणी डाल:एन्युमेरेट डिक्शनरी। वैल्यू बनाम डिक्शनरी खुद
private readonly Dictionary<IService, object> _resolvedServices = new Dictionary<IService, object>();
// Code removed for brevity
public void Dispose()
{
// Code removed for brevity
// PERF: We've enumerating the dictionary so that we don't allocate to enumerate.
// .Values allocates a KeyCollection on the heap, enumerating the dictionary allocates
// a struct enumerator
foreach (var entry in _resolvedServices)
{
(entry.Value as IDisposable)?.Dispose();
}
_resolvedServices.Clear();
}
अंतर अगर शब्दकोश ऐसा प्रगणित है क्या है?
foreach (var entry in _resolvedServices.Values)
{
(entry as IDisposable)?.Dispose();
}
यह एक प्रदर्शन प्रभाव पड़ता है? या ऐसा इसलिए है क्योंकि ValueCollection आवंटित करने से अधिक स्मृति मिल जाएगी?
ऐसा लगता है कि मैंने हेपिंग और स्टैकिंग की अवधारणा को याद किया है, जिसे यहां वर्णित किया गया है http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_memory01122006130034PM/csharp_memory.aspx वैसे भी धन्यवाद। –