SORU
4 Ocak 2012, ÇARŞAMBA


Neden TextBox ekleme yapar.Bir döngü sırasında metin her yineleme ile daha fazla bellek kadar sürebilir?

Kısa Bir Soru

180,000 kez çalışan bir döngü var. Her yinelemenin sonunda gerçek zamanlı güncellenen bir TextBox, sonuçları eklemek gerekiyordu.

MyTextBox.Text = someValue kullanarak uygulama belleği büyük miktarda yemek için neden, ve birkaç bin kayıtları sonra kullanılabilir bellek tükendi.

*2 180,000* bir zamanlar metin ekleme daha verimli bir yolu var mı?

EditGerçekten umrunda değil sonuç, bu özel durumda, ancak bilmek istiyorum neden bu gibi görünüyor bir bellek domuz ve varsa daha verimli bir şekilde metin eklemek için bir Metin kutusu.

Uzun (Orijinal) Soru

CSV dosyasında KİMLİK numaralarının bir listesini okur küçük bir uygulamam var ve her biri için bir PDF rapor oluşturur. Her pdf dosyası oluşturulduktan sonra, ResultsTextBox.Text işlenmiş ve başarılı bir şekilde işlendiğini rapor KİMLİK Numarası eklenmiş olur.Süreci bir arka plan iş parçacığı üzerinde çalışır, ResultsTextBox öğeleri işleme gibi gerçek zamanlı olarak güncellenir

Şu anda zaman geçtikçe uygulama kaplıyor bellek katlanarak büyüyor ancak 180,000 KİMLİK numaraları, karşı uygulamayı çalıştırıyorum. 90 kalibre, ama yaklaşık 3000 kayıtları ile yaklaşık 250 MB kaplıyor ve uygulama belleği 500 MB kaplıyor 4000 kayıtları ile çevresinde başlar.

Eğer Sonuçları için Güncelleştirme açıklama TextBox, bellek kabaca ResultsText.Text = someValue yazma bellek yemeye neden olduğunu herhalde 90 KALİBRE, nispeten sabit kalır.

Benim sorum, neden bu? Ne bir TextBox veriyi daha doğru olur.Bellek yemez bu metin?

Benim kod bu gibi görünüyor:

try
{
    report.SetParameterValue("Id", id);

    report.ExportToDisk(ExportFormatType.PortableDocFormat,
        string.Format(@"{0}\{1}.pdf", new object[] { outputLocation, id}));

    // ResultsText.Text  = string.Format("Exported {0}\r\n", id);
}
catch (Exception ex)
{
    ErrorsText.Text  = string.Format("Failed to export {0}: {1}\r\n", 
        new object[] { id, ex.Message });
}

Gerektiği de kayda değer uygulaması sadece bir seferlik bir şey fark etmiyor o alacak bir kaç saat (veya gün :)) oluşturmak için tüm raporları. En büyük endişem ise sistem bellek sınırı vurur, durur.

İyiyim bırakarak hat güncellenmesi Sonuçları TextBox diye bu çalıştırmak için bir şey, ama benim için varsa bir bellek daha verimli şekilde ekleme veri için TextBox.Text gelecekteki projeler.

CEVAP
4 Ocak 2012, ÇARŞAMBA


Bellek kullanımı çok büyük sebebi kutularının bir kullanıcı geri alabilirsiniz böylece yığın korumak için metni yeniden/şüpheleniyorum. Bu özellik senin durumunda gerekli görünmüyor, yanlış IsUndoEnabled ayarlamayı deneyin.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • David Wills

    David Wills

    31 Aralık 2007
  • Lin Steven

    Lin Steven

    17 EKİM 2006
  • Peyton

    Peyton

    28 Aralık 2008