Ç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
8
A
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;
İlgili konular
- 1. TObjectList <T> Neden serbest nesneleri temizlemiyorsunuz?
- 2. iphone'da bir NSInteger serbest bırakmak için gerekli mi?
- 3. Android Gradle - sadece serbest bırakmak için ayırmalar mı kullanıyor?
- 4. hata ayıklayıcı zombiyi serbest bırakmak için intihar ediyor
- 5. Neden bir parçayı değiştirmiyor?
- 6. Python'un bir çok satırlı dizgiyi serbest bırakmak için yerleşik bir işlevi var mı?
- 7. Şu anda Eylül etrafında serbest bırakmak istediğiniz yeni bir ASP.NET MVC 5 proje inşa ediyorum
- 8. Bir WPF'yi bir Veritabanı ile Serbest Bırakma
- 9. TS 2.0'dan sonra Aurelia'nın TypeScript tür tanım dosyalarını (* .d.ts) düzgün şekilde nasıl alırsınız. serbest bırakmak?
- 10. Python'da serbest bir işlevle nasıl alay edilir?
- 11. Serbest ve İyi Kod Formatlayıcı
- 12. Orta parçayı FragmentStack'den kaldırın
- 13. Parçamdaki Parçayı, Swift
- 14. Bir parçayı yukarı veya aşağı çekmek için nasıl kapatılır?
- 15. Bir Mutex'i Serbest Bırakma
- 16. Gezinme çekmecesinde ilk öğeyi seçme ve uygulamada bir parçayı açma
- 17. Android: Looper'ı bırakmak mı?
- 18. , fragmanlara dönüştürülecek parçayı döndürürse,
- 19. Büyük sayfaları kullanmak için Prolog işlemciyi onayla
- 20. Geçerli parçayı FragmentPagerAdapter
- 21. Neden kullanılmayan değişkenler bozuk?
- 22. Atanan veya tutulan bir nesneyi kaç kez serbest bırakırım?
- 23. ses html5 Sonraki parçayı
- 24. Kullanılmayan sembolün sıyrılmasını önleme
- 25. Image.FromFile bir dosyadaki tanıtıcıyı serbest bırakmıyor
- 26. Android: bir parçayı başka biriyle değiştiremez
- 27. ARC'nin nereye takılacağını görmek ve bırakmak
- 28. Belleği serbest bırakmak için neden FreeMem/Dispose yordamlarını kullanıyorsunuz, ancak bellek azalmıyor?
- 29. MTAudioProcessingTap'ı nasıl serbest bırakırsınız?
- 30. Xib kaynaklarını serbest bırakmalı mıyım?
Bu iyi çalışıyor, teşekkürler. – programstinator