2012-10-17 22 views
8

Çok fazla veri depolamak için bir TObjectList (Delphi 2007) kullanıyorum - Yaklaşık 300 bin öğeye veya daha fazlasına sahip olmasını bekliyorum. Bununla birlikte, bir liste oluşturulduğunda, varsayılan boyut yalnızca dört elemanı saklamak üzere, ardından bir beşinci eleman eklemeye çalışırsa sekiz, sonra biri dokuzuncu bir öğe eklemeye çalışırsa onaltılık olarak ayarlanır. Sayılar kapalı olabilir, ama çalışmaların doğru olduğunu düşünüyorum. Bununla ilgili sorun, tüm elemanların, belleğin ayrılan kısmından yeni genişletilmiş listenin geçtiği yeni bellek bloğuna kopyalanması gerektiğidir. Belirli bir başlangıç ​​büyüklüğü ayarlamak ve listeyi ayırdığı/ayırdığı kullanılmayan alanı ayırmak (ya da ayırmak aynı şey olmadığı için bellek ayırma işlemini geri almak istiyorum). Muhtemelen bu bir çok kod değil, ama bu sorunun bir soru ve cevap şeklinde kalıcı, sağlam bir referansı olması gerektiğini düşünüyorum.Büyük bir TObjectList kullanmak ve kullanılmayan parçayı serbest bırakmak

cevap

12

Capacity, beklediğiniz en yüksek sayıda öğeye ayarlayın, listeyi doldurun ve daha sonra kullandığınız (isteğe bağlı) için Capacity'u ayarlayın. Bu, tüm ayırma/taşıma/ayırma/taşıma işlemlerini engeller.

MyList.Capacity := 300000; 
// Add 280000 items here 

// Optionally, reduce the capacity. It's not important to do so unless 
// you end up with a lot of unused items. 
MyList.Capacity := MyList.Count; 
+0

Bu iyi çalışıyor, teşekkürler. – programstinator

İlgili konular