ASP.NET ekibinin çerçeveyi hızlandırmak için ne tür hileler kullandığını görmek için GitHub'da ASP.NET çekirdeğinin kaynaklarını araştırıyordum. Beni etkileyen bir şey gördüm. Imha uygulanmasında ServiceProvider kaynak kodunda,, onlar bir sözlük numaralandırmak ve onlar bir performans hile göstermek için bir yorum koyun:Enumerate Dictionary.Values vs Sözlük kendisi
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();
}
Sözlük böyle sayılan eğer fark nedir?
foreach (var entry in _resolvedServices.Values)
{
(entry as IDisposable)?.Dispose();
}
bir performans etkisi vardır? Ya da bir ValueCollection tahsis etmek daha fazla hafıza tüketir mi?
Burada iyi tanımlanmış olan Yığınlama ve Yığınlama kavramını kaçırdım görünüyor http://www.c-sharpcorner.com/UploadFile/rmcochran/csharp_memory01122006130034PM/csharp_memory.aspx Bu arada. –