SORU
23 EYLÜL 2008, Salı


Korkunç benim iki ekrandan birinde DataGridView performans çizer

Aslında ben sorunu hallettim, ama gelecek kuşaklar için post ediyorum.

Çift monitör sistemi DataGridView ile çok garip bir sorun ile karşılaştım. Sorun denetimin son DERECE yavaş bir rötuş olarak kendini gösterir (tam bir yeniden boyamak için 30 saniye kadarbenim ekrandan birinde, ama sadece. Ne zaman diğer tarafta, yeniden boyamak hızı da gayet iyi. Beta olmayan en son sürücüleri (175. nVıdıa 8800 GT var bir şey). Sürücü bir hata mı? Bu özel yapılandırma ile yaşamak zorunda olduğum için o havada o kadar terk edeceğim. (Kart ama ATI...) olmaz

Boya hızlı hücre içeriği ile ilgisi yok, ve özel çizim sadece katı bir dikdörtgen resim bile performansını hiç iyileştirmek değil.

Ben bir ElementHost (Sistem.yerleştirdikten sonra dışarı bulmak Windows.Formlar.Formda entegrasyon ad) bu sorunu düzeltir. Sadece DataGridView da formun bir çocuk olması gerekir ile berbat olmak zorunda değil. Yeniden boyutlandırılan (0, 0) olarak uzun olabilirGörünürözelliği true.

Açıkça eklemek istemiyor .Net 3/3.5 bağımlılık uygulamam için, zamanında bu kontrol eğer olursa) yansıma oluşturmak için bir yöntem. Çalışır, ve en azından nazik bir şekilde gerekli kütüphane yok makinelerde başarısız - ama artık yavaş gider.

Bu yöntem de bana app çalışırken düzeltmek için uygulamak daha kolay WPF kütüphaneler benim form (Casus kullanarak) değişiyor ne olduğunu görmek için izin verir.

Deneme yanılma bir sürü sonra, kumanda üzerindeki çift tamponlama sağlayan kendisi sadece formu farklı olarak) bu sorunu düzeltir fark ettim!

< / ^ hr .

Yani, sadece kendi DoubleBuffering etkinleştirmek için özel bir sınıf DataGridView dayanarak yapmak gerekir. İşte bu!

class CustomDataGridView: DataGridView
{
    public CustomDataGridView()
    {
        DoubleBuffered = true;
    } 
}

Kılavuz benim örneklerinin olduğu sürece tüm bu özel sürüm, tüm iyi kullanıyor. Ben hiç çalışma içine bir durum nedeniyle bu yerde değilim kullanabilir alt çözüm bulamazsam kodu), herhalde denemek için enjeksiyon kontrol üzerine formu :) (yansıma DoubleBuffered özelliği gücü üzerinde kullanmayı deneyin daha olacağım, ancak dışarıdan bir kez daha bağımlılığı önlemek için).

Böyle basit basit bir şey zamanımı çok yedi üzücü

CEVAP
1 EKİM 2008, ÇARŞAMBA


Sadece kendi DoubleBuffering etkinleştirmek için özel bir sınıf DataGridView dayanarak yapmak gerekir. İşte bu!


class CustomDataGridView: DataGridView
{
    public CustomDataGridView()
    {
        DoubleBuffered = true;
    } 
}

Kılavuz benim örneklerinin olduğu sürece tüm bu özel sürüm, tüm iyi kullanıyor. Ben hiç çalışma içine bir durum nedeniyle bu yerde değilim kullanabilir alt çözüm bulamazsam kodu), herhalde denemek için enjeksiyon kontrol üzerine formu :) (gerçi olacağım daha deneyin kullanarak yansıma için kuvvet DoubleBuffered özelliği dışarıdan bir kez daha önlemek bağımlılık).

Böyle basit basit bir şey zamanımı çok yedi üzücü

Not: bu cevap bir cevap Verme soru cevap olarak işaretlenebilir

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ASUS

    ASUS

    22 EKİM 2005
  • jocc talking shit

    jocc talking

    6 NİSAN 2007
  • Matthew Pearce

    Matthew Pear

    9 AĞUSTOS 2009