Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[WinForms] Snelheidsverbetering sortering/filtering ListView

Pagina: 1
Acties:

  • F.West98
  • Registratie: Juni 2009
  • Laatst online: 12:07

F.West98

Alweer 16 jaar hier

Topicstarter
Hallo :w

Op dit moment heb ik in een applicatie in WinForms (ja, beetje oud), en ik heb daar een listView met een paar duizend items. Berekeningen hieraan gaan allemaal heel snel, maar vooral het veranderen van de volgorde (sortering), en het filteren zorgen voor problemen. Het lijkt er dus op dat het opnieuw laden van de UI het meeste tijd inneemt.
Op dit moment gebeurt het filteren naar mijn idee ook nog niet heel efficiënt, ik wis de hele ListView en voeg de gefilterde items weer toe uit een lokale kopie van de volledige lijst (ik genereer niet alle ListViewItems opnieuw). Ik heb het gevoel dat dat wel beter kan, maar hoe?
Het grootste probleem is dat tijdens het bijwerken ook de gehele UI hangt, omdat de UI thread zo druk bezig is :P

Op internet word ik niet veel wijzer, aangezien dat allemaal kleine datasets zijn.

Heeft iemand goede suggesties, of is dit gewoon een verloren zaak (en moet ik gaan proberen mijn dataset te verkleinen)?

[ Voor 6% gewijzigd door F.West98 op 15-01-2015 00:45 ]

2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Steekwoorden: listview virtualmode

MSDN: ListView.VirtualMode Property (System.Windows.Forms)

[ Voor 70% gewijzigd door RobIII op 15-01-2015 00:57 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • F.West98
  • Registratie: Juni 2009
  • Laatst online: 12:07

F.West98

Alweer 16 jaar hier

Topicstarter
Ah, dat ziet er goed uit!
Ik ga me er morgen eens in verdiepen, maar alvast bedankt :)

2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI


  • EfBe
  • Registratie: Januari 2000
  • Niet online
En natuurlijk alleen wijzigingen doen aan de ListView na een BeginUpdate() call en dan afsluiten met een EndUpdate() call. ListView leunt erg op Win32 messaging, BeginUpdate/EndUpdate() stellen het afhandelen van die messages uit, zodat er geen tijd verloren gaat aan het tekenen van de listview met onderdelen die toch weer wijzigen.

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • whoami
  • Registratie: December 2000
  • Nu online
^^ dat.

ook gemerkt dat het kan helpen als je de AutoSize mode (oid) van de columns pas zet nadat je de ListView opgevuld hebt.

https://fgheysels.github.io/


  • F.West98
  • Registratie: Juni 2009
  • Laatst online: 12:07

F.West98

Alweer 16 jaar hier

Topicstarter
Ik heb het inmiddels geïmplementeerd en het is inderdaad sneller!
De grootste bottleneck zit nu nog in het filteren (en sorteren) van de data, dat zijn gewoon een heleboel compares enzo (+- 3 seconden). Ik ga kijken hoe ik dat async kan doen zodat ik de interface niet laat vastlopen :P

Verder kwam ik dit nog tegen: http://www.codeproject.co...ch-Easier-to-Use-ListView (3.2 FastObjectListView).
Zou dat nog de moeite waard zijn om te implementeren? Of maakt dat qua snelheid weinig meer uit?

[ Voor 3% gewijzigd door F.West98 op 16-01-2015 00:28 ]

2x Dell UP2716D | R9 7950X | 128GB RAM | 980 Pro 2TB x2 | RTX2070 Super
.oisyn: Windows is net zo slecht in commandline als Linux in GUI


  • alwinuzz
  • Registratie: April 2008
  • Laatst online: 09:48
Heb je al gemeten wat de bottleneck is? met een profiler bijvoorbeeld.

  • Stukfruit
  • Registratie: Oktober 2007
  • Niet online
F.West98 schreef op vrijdag 16 januari 2015 @ 00:26:
Verder kwam ik dit nog tegen: http://www.codeproject.co...ch-Easier-to-Use-ListView (3.2 FastObjectListView).
Zou dat nog de moeite waard zijn om te implementeren? Of maakt dat qua snelheid weinig meer uit?
Die is vooral leuk omdat je daarmee meer keuze hebt en data binding kan gebruiken (zie features), maar de documentatie is op de FAQ en voorbeelden na wel wat beperkt. De listviews in die libraries updaten vooral wat mooier dan die van de standaard variant uit Windows forms omdat ze een backbuffer gebruiken voor de controls.

Met die data binding hoef je trouwens gelijk niet meer steeds hele lijsten opnieuw toe te voegen en wordt je code ook wat netter.

Dat zit wel Schnorr.

Pagina: 1