DataGridView scrolling verursacht relativ hohen CPU load

  • C#
  • .NET (FX) 3.0–3.5

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von Fortender.

    DataGridView scrolling verursacht relativ hohen CPU load

    Hallo,
    ich binde einen eigenen Datentyp (Klasse mit ca. 6 Eigenschaften) in Form einer List<T> an eine BindingSource. Die Daten werden mit einem DataGridView visualisiert.
    Beim scrollen fällt mit auf, dass ein relativ hoher CPU load entsteht (Peak bei ca. 10%). Ich habe ca. 100 Items in der Liste, die scheinbar (habe es per Debugging geprüft)
    nicht direkt sondern erst beim scrollen geladen werden. Habe Break-points bei den Get-Accessoren der Klassen gesetzt und es werden lediglich zuvor gespeicherte strings ausgelesen
    und dann im DGV dargestellt. Es wird also nach dem erstellen der List<T> nichts mehr berechnet.

    Ist das normal, dass das Laden der Eigenschaften vieler Objekte, die an eine DataSource gebunden sind einen solchen Load erzeugt?

    MfG Tim
    Also ginge der Load von 10% völlig in Ordnung deiner Meinung nach?
    Schnelles scrollen direkt per Scrollbar (nicht per Mausrad) verursacht eine Art Lag, vermutlich weil die Daten
    innerhalb kurzer Zeit geladen und visualisiert werden müssen oder nicht?

    MfG Tim
    keine Ahnung.

    Wie gesagt, einen Test wäre es wert, ein ungebundenes DGV zu basteln, mit iwelchen Dummi-Daten vollzumüllen und damit herumzuscrollen.

    Damit hätte man einen Vergleich, mal mit Laden (über Databinding), mal ohne.

    Mir sind bislang auch keine Scroll-Laggs aufgefallen, jdfs nicht in WinForms.
    ist jetzt nicht ganz einzusehen, wieso ich den Test schreiben musste, und nicht du, aber seisdrum.

    Ich finde jdfs. keinen signifikanten Unterschied im Scrollverhalten, obs DGV nun gebunden ist oder nicht.
    Scrollen zieht scheints so oder so erheblich Cpu-Power.
    Dateien
    Ok danke dir. Ja war ein Versehen.
    Hätte noch eine Frage bezüglich des DataGridViews.
    Wenn ich einen Integer oder ein Handle (IntPtr) in Hexadezimal darstellen möchte, schreibe ich mir dann in meiner Klasse einfach noch eine Eigenschaft die den Integer/IntPtr
    dann formatiert ausgibt, oder gibt es da eine vernünftige Formatting-Methode? Bei datengebundenen Comboboxen konnte ich das direkt über ein Formatting Event machen.

    MfG Tim