List.Capacity sadece belleği önceden belleğe alır, böylece liste ek bellek ayırmalarına ve ilişkili yığın parçalanmalarına neden olmadan kapasite sınırına çıkabilir. List.Capacity 1000'e ayarlandığında 1000 giriş erişilebilir değildir. List.Count, gerçek liste içeriklerinin sonunu gösterir. List.Insert(), List.Count ötesine öğeler eklemek için kullanılamaz.
1000 öğeden oluşan bir dizi oluşturma ve sonra da bir listeye dönüştürme geçici çözümünüz, listeden boş yuvaları ayırmak için List.Add() öğesini 1000 kez çağırmak için bir kısayoldur (List.Count öğesini 1000'e getirin). Calling List.Add() 1000 kere daha fazla hafızaya sahiptir, çünkü dizi tekniği ile listenin hafızasında 2 kopya olacaktır (dizi için 1 ve liste için 1).
Seyrek bir dizi için Dictionary<int, sometype>
kullanma önerisi indirgenmiştir, çünkü seyrek nüfuslu bir diziden daha fazla bellek kullanır. Bu, verilerinizin ne kadar seyrettiğine bağlı. 0..1000 dizin aralığında yalnızca 100 öğeniz varsa,% 10 yoğunluğa sahipsiniz. Ayrıca% 90 boşa harcanmış bellek de diyebilirsiniz.
Bir sözlük, 1000 yoğunluklu bir dizi ayırmaktan ziyade yalnızca 100 yuva kullanarak, düşük yoğunluklu seyrek dizi için neredeyse daha fazla bellek verimli olacaktır. Sözlük uygulamasının veya bellek kullanımının özelliklerini bilmiyorum, ancak muhtemelen bir tahmin, eğer seyrek dizinizin yoğunluğu% 50 veya daha fazla ise, bir sözlük yerine bir dizi kullanmak, bellek ve hız için kazanır.
Yok, Add() yöntemini kullanın. –
Eğer seyrek bir liste iseniz (1000 aralığındaki 10,20 öğe gibi), aslında bir Liste yerine bir 'Sözlük' araması yapabilirsiniz. –
@ssg Yup, seyrek liste. Sözlük kullanmak iyi bir öneridir. Ama sonra daha fazla alan kullanıyorum. Daha basit bir şey var mı? – user1041086