Her kare denen bir güncelleştirme döngüsü olan bir simülasyon yazıyorum. Güncelleme işlevinde, güncellenmesi gereken milyonlarca nesne var, dolayısıyla böyle görünüyor.C# çöp toplama nasıl azaltılabilir
public void Update(float deltaTime)
{
Time += deltaTime;
foreach (SimulationObject obj in objects.ToArray())
obj.Update(deltaTime);
}
where objects is
List<SimulationObject> objects = new List<SimulationObject>();
and is populated at program initialization time.
Muhtemelen objects.ToArray() her çerçeve daha sonra kopya çöp toplama işlemine alır bu büyük listenin bir kopyasını yapar görebilirsiniz. Bu benim için büyük performans sorununa neden oluyor. Yaklaşık 2 dakika süren bir işlem için toplanan çöp yaklaşık 2G'ye ulaşıyor. Bu nesnelerin listesi bazı üçüncü taraf kitaplığı tarafından arka planda eşzamansız olarak değiştirildiğinden, ToArray() öğesini kaldıramıyorum.
Çöp toplama işlemini azaltmanın iyi bir yolu var mı, yoksa kopyalanan alanın kopyalanmasını veya yeniden kullanılmasını önlemek mi istiyorsunuz?
C# için yeni ve yanıt aramayı denedim, ancak mümkün değildi. Bu bir çoğaltılan gönderiyse özür dilerim. o zaman ve bellek sadece kaybıdır,
Bilginize .ToArray() koleksiyonunun bir kopyasını oluşturur, 783a052330e7d48d – Eminem
Lütfen şu adresteki cevaba bakınız: [Kısa bir süre çöp toplama işlemini önleme] (http://stackoverflow.com/questions/6005865/prevent-net-garbage-collection-for-short-period-of-time) – Eminem
@Eminem - SimulationObject öğesinin bir "struct" (başvuru tipi) değil, "struct" (değer) olduğunu varsayar. – Corak