.NET 6’daki yenilikler [13]: Nesne kümeleri için Garanti Kapasitesi ()

Womanne

Member
yeni yöntem EnsureCapacity() .NET nesne kümelerinde bellek ayırır.


.NET 6’da Microsoft, kümeye türleri ekledi List<T>, Stack<T> Ve Queue<T> yöntem EnsureCapacity() katma. Bu, bir seti istediğiniz boyuta getirmenize olanak tanır ve öğeler eklendikçe genişlemeye devam etme zorunluluğunu ortadan kaldırır, bu da belirli bir sürenin gerekli olduğu anlamına gelir.

Aşağıdaki program kodu ile kullanım esnasında ölçülebilir hız avantajı elde edebilirsiniz. EnsureCapacity() göstermek:

/// <summary>
/// Leistung mit und ohne EnsureCapacity()
/// Dr. Holger Schwichtenberg, 2021
/// </summary>
public static void EnsureCapacityPerfTest()
{
CUI.H2("EnsureCapacity für List<T>, Stack<T>, "and Queue<T>");
int count = 100000000;
void FillCollection(List<double> list, int count)
{
for (int i = 0; i < count; i++)
{
list.Add(Math.Sin((double)i));
}
}

void MemoryCleanup()
{
GC.Collect();
GC.WaitForPendingFinalizers();
}

for (int i = 0; i < 10; i++)
{
MemoryCleanup();

var sw1 = new Stopwatch();
sw1.Start();
List<double> list1 = new();
FillCollection(list1, count);
sw1.Stop();

Console.WriteLine(list1.Count +
"x Add() ohne EnsureCapacity(): " +
sw1.ElapsedMilliseconds);

MemoryCleanup();

var sw2 = new Stopwatch();
sw2.Start();
List<double> list2 = new();
list2.EnsureCapacity(count);
FillCollection(list2, count);
sw2.Stop();
Console.WriteLine(list2.Count +
"x Add() mit EnsureCapacity(): " +
sw2.ElapsedMilliseconds);
}
}





Önceki listenin çıktısı



Önceki listenin çıktısı



özlü belgeler EnsureCapacity() .NET sınıf kitaplığı belgelerinde bulunabilir. Biraz daha fazlası GitHub’da mevcut.


()



Haberin Sonu
 
Üst