[VB] listview clearen is langzaam

Pagina: 1
Acties:

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
Hi,

Ik heb een listview in VB met daarin plm 50.000 adressen. Als ik de listview wil clearen, dan duurt het enorm lang voordat hij leeg is.

Iemand een idee hoe dat komt en wat ik er aan kan doen ?

  • ruuds
  • Registratie: Maart 2001
  • Laatst online: 13:54
zie je de inhoud zo langzaam omhoog / wegschuiven?? dan komt t gewoon door de eye-candy van windowz... (net als dat vloeiend schuiven in IE wat ik overigens uit heb staan)

doet ie dat ook bij 10 items?

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
nee, het lijkt of hij hangt. scherm blijft wit en er gebeurd een tijdje niets. Daarna gaat het programma verder..

  • ruuds
  • Registratie: Maart 2001
  • Laatst online: 13:54
ehm... misschien dan omdat het veel geheugen in neemt.... ik zou het anders niet weten, en denk (als het dit is) dat je dat ook niet kan oplossen

  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

kun je de form niet ff hiden of zo? en na de clear weer laten showen? Misschien dat dat helpt?

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:04
Hoe wis je de items? Door de Clear() functie oid aan te roepen?

Wordt er code uitgevoerd bij de OnItemDelete event ofzo van de listview?

Maak je gebruik van de BeginUpdate() en EndUpdate() functies?

https://fgheysels.github.io/


  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

whoami schreef op 10 september 2002 @ 11:38:
Hoe wis je de items? Door de Clear() functie oid aan te roepen?

Wordt er code uitgevoerd bij de OnItemDelete event ofzo van de listview?

Maak je gebruik van de BeginUpdate() en EndUpdate() functies?
Ja das ook iets.... wat de boel kan vertragen idd

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
Hiden van listview heeft geen resultaat en ik clear ze idd met de Clear-method van het listview. Er zijn geen events aanwezig.

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:04
Ik weet niet of het helpt bij het aanroepen van de Clear functie (ik veronderstel van wel) maar probeer eens dit:

code:
1
2
3
ListView.BeginUpdate();
ListView.Items.Clear();
ListView.EndUpdate();


Edit: kan zijn dat het ListView.Items.BeginUpdate() ofzo iets is... ben niet echt vertrouwd met VB.

https://fgheysels.github.io/


  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

hiden van de hele form dan? dat een optie? Opnieuw form bouwen? Vaag probleem...
btw 50000 adressen.. zijn wel heel plenty..is dat uberhaupt handig om deze in 1 listview te zetten?

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
zal wel moeten, opdrachtgever wl het zo

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

whoami: dat is BCB-code en Begin/EndUpdate zijn gebaseerd op de interne dispatch-mechanismes van VCL, dus ik betwijfel of dat portable is. Ik denk dat je in VB beter even naar LockUpdate kunt zoeken om repaints af te blokken op je hele window, op dat moment gaat het clearen van een ListView meestal binnen een fractie van een seconde.

Professionele website nodig?


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

pkouwer schreef op 10 september 2002 @ 11:45:
zal wel moeten, opdrachtgever wl het zo
Opdrachtgever is vaak dom, en jij bent slim dus jij werkt met een 'view': je faket dat er 50000 elementen in de lijst staan door de scrollbar om de tuin te leiden, en zorgt er vervolgens voor dat alleen de zichtbare elementen in de listview staan... en vervolgens ga je bij het scrollen dynamisch de lijst vullen/legen.

Just a thought :)

Professionele website nodig?


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:04
curry684 schreef op 10 september 2002 @ 11:46:
whoami: dat is BCB-code en Begin/EndUpdate zijn gebaseerd op de interne dispatch-mechanismes van VCL, dus ik betwijfel of dat portable is. Ik denk dat je in VB beter even naar LockUpdate kunt zoeken om repaints af te blokken op je hele window, op dat moment gaat het clearen van een ListView meestal binnen een fractie van een seconde.


Hmmm.... In .NET heeft een Listview ook een method BeginUpdate en EndUpdate vandaar....

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:04
henkleerssen schreef op 10 september 2002 @ 11:45:
hiden van de hele form dan? dat een optie? Opnieuw form bouwen? Vaag probleem...
btw 50000 adressen.. zijn wel heel plenty..is dat uberhaupt handig om deze in 1 listview te zetten?


Dat vind ik niet echt een optie. Het hiden van een form zorgt altijd wel voor verwarring bij de gebruiker, en het opnieuw creëeren kan ook traag gaan.

https://fgheysels.github.io/


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Kijk hier eens naar. Een DB-bound listview met dynamische updatetechniek en alle andere rotzooi die je zou kunnen wensen... en kost nauwelijks wat.

Professionele website nodig?


  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
curry684 schreef op 10 september 2002 @ 11:48:
[...]

Opdrachtgever is vaak dom, en jij bent slim dus jij werkt met een 'view': je faket dat er 50000 elementen in de lijst staan door de scrollbar om de tuin te leiden, en zorgt er vervolgens voor dat alleen de zichtbare elementen in de listview staan... en vervolgens ga je bij het scrollen dynamisch de lijst vullen/legen.

Just a thought :)
hmm...niet eens zo'n slecht idee, zal eens gaan knutselen

  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

Idd.. dynamisch updaten.. lijkt me dan een oplossing... Lijkt me alleen wat veel werk..

  • Tukk
  • Registratie: Januari 2002
  • Laatst online: 01-09 08:19

Tukk

De α-man met het ẞ-brein

Ik weet niet of een form hidden maken er voor zorgt dat de paint functie niet uitgevoerd wordt.
Volgens mij is dat het gene wat je wil voorkomen door de form hidden te maken.
Schakel van de form en mogelijk van de control de paint-functie uit voordat je alles gaat verwijderen.
code:
1
 form.autoredraw = false

Daarna zet je de redraw weer aan. Hierdoor zal het zeker niet trager worden en je form verdwijnt niet.
helpt het?

Q: How many geeks does it take to ruin a joke? A: You mean nerd, not geek. And not joke, but riddle. Proceed.


  • ruuds
  • Registratie: Maart 2001
  • Laatst online: 13:54
henkleerssen schreef op 10 september 2002 @ 11:54:
Idd.. dynamisch updaten.. lijkt me dan een oplossing... Lijkt me alleen wat veel werk..
maar als ie anders zo traag wordt moet je wel......

  • Mir
  • Registratie: Maart 2001
  • Niet online

Mir

Je moet even .Redraw(was het nou zo? ... damn, weet het even niet meer uit mijn hoofd) uitzetten, clearen, aanzetten.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

henkleerssen schreef op 10 september 2002 @ 11:54:
Idd.. dynamisch updaten.. lijkt me dan een oplossing... Lijkt me alleen wat veel werk..
En daarom gaf ik die link erbij waar je voor een relatief klein bedrag een superdeluxe control kunt bestellen die dat allemaal voor je doet :)

Professionele website nodig?


  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
ik denk dat ik idd de lijst splits in blokken van 10.000 en met een 'page up', page down'functie ga werken

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

pkouwer schreef op 10 september 2002 @ 12:04:
ik denk dat ik idd de lijst splits in blokken van 10.000 en met een 'page up', page down'functie ga werken
Dat is wel heel ranzig, doe ze dan splitsen op eerste letter achternaam

Professionele website nodig?


  • pkouwer
  • Registratie: November 2001
  • Laatst online: 07-10-2025
waarom zou ik niet gewoon zeggen de eerste 1000 records, tweede 100 0 records,.... ?

Verwijderd

in c++ zou ik een LVM_DELETEALLITEMS sturen om de listview leeg te maken...

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

pkouwer schreef op 10 september 2002 @ 12:17:
waarom zou ik niet gewoon zeggen de eerste 1000 records, tweede 100 0 records,.... ?
Omdat ik dan als ik Pietje Puk wil opzoeken alle pagina's van 30 tot 40 moet uitspitten.

Professionele website nodig?


  • Mir
  • Registratie: Maart 2001
  • Niet online

Mir

Verwijderd schreef op 10 september 2002 @ 12:18:
in c++ zou ik een LVM_DELETEALLITEMS sturen om de listview leeg te maken...
:O
Ja, en in ASM een reset..

daar gaat het in dit topic toch niet om!

  • Mir
  • Registratie: Maart 2001
  • Niet online

Mir

pkouwer, heb je die autoredraw's al uitgeprobeerd? (kan het hier niet doen)

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 31-08 15:46

mulder

ik spuug op het trottoir

Mir schreef op 10 september 2002 @ 13:31:
[...]


:O
Ja, en in ASM een reset..

daar gaat het in dit topic toch niet om!
Waarom niet? VB kan volgens mij ook gewoon een SendMessage doen.

oogjes open, snaveltjes dicht


  • Lorn
  • Registratie: Maart 2000
  • Laatst online: 13-01-2025

Lorn

I have a bad feeling...

LockUpdate of iets in die geest werkt geweldig zoals iemand anders ook al heeft aangegeven. Scheelt echt een heleboel tijd als je de listview gaat leeg gooien. Is verreweg de meeste simpele oplossing.

  • Mir
  • Registratie: Maart 2001
  • Niet online

Mir

Don Facundo schreef op 10 september 2002 @ 13:34:
[...]


Waarom niet? VB kan volgens mij ook gewoon een SendMessage doen.
Ok, woorden terug genomen als je het bedoelde als echte optie en niet " C++ is beter".

Want ja dat kan, sendkeys()

  • Unifex
  • Registratie: Juni 2002
  • Laatst online: 02-04 13:57
kun je die code eens laten zien heb hier een klein testje met 75000 entries gedaan en die is in 1 sec leeg.
list.visible = false
list.clear
list.visible = true

Guess what we are not stupid, just ignorant!


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:04
Unifex schreef op 10 september 2002 @ 14:27:
kun je die code eens laten zien heb hier een klein testje met 75000 entries gedaan en die is in 1 sec leeg.
list.visible = false
list.clear
list.visible = true


Wat is het gevolg van die code? Je listview is ff weg, en verschijnt terug maar dan leeggemaakt.... De grote verdwijntruuk zeg maar. Volgens mij heeft dat als gevolg dat je scherm even 'flikkert'.

Ik zou met zo'n code bij m'n baas of klanten moeten aankloppen, 't zou niet in goeie aarde vallen...

https://fgheysels.github.io/


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 13:54

Crazy D

I think we should take a look.

In een selectie scherm "moest" ik van de klant ook eerst alles tonen, want dat vond ie wel makkelijk, kon ie lekker scrollend zoeken. Nadat we het hadden laten zien op zijn eigen database met 10.000+ artikelen, vond ie heel snel dat het misschien toch handiger is om eerst een zoektekst in te laten geven. En hij vond het, als ie een zoekopdracht geeft die heel veel voorkomt (e of zo...) het dan ook logisch dat het eventjes duurt, en vond het dan ook niet zo erg. Sindsdien gebruik ik dat standaard, en de meesten vinden dat toch wel handig werken (zeker als je de zoekform meteen op een eventueel ingevoerde tekst laat zoeken en bij 1 resultaat die ook meteen selecteerd).

Exact expert nodig?


  • Unifex
  • Registratie: Juni 2002
  • Laatst online: 02-04 13:57
Die flikkering is minimaal.
Sterker nog is nauwelijks waarneembaar, aangezien hij de verticale scrollbar weghaalt, lijkt het op een draw actie.

Ivm traagheid is de visiblity van een component meestal de bottleneck.

Dit geldt overigens voor veel componenten. Test het bijv. maar eens met notepad
Lees een bestand in van 1mb en replace alle , met een ;.

Als je dit met een maximaal window doet gaat het erg traag. Hij update namelijk steeds de view pane.
maak je de view pane zo klein dat je niets ziet dan is hij binnen een sec klaar.

Dit geldt ook voor een listview box. Vandaar dat je hem even niet visible maakt.

Guess what we are not stupid, just ignorant!


  • Mir
  • Registratie: Maart 2001
  • Niet online

Mir

Je kan er desnoods nog een fake listbox achter zetten waardoor het lijkt alsof 'ie gelijk leeg is (disable die fake dan ofzo).

als we dan toch al ranzig bezig zijn ;)

  • Unifex
  • Registratie: Juni 2002
  • Laatst online: 02-04 13:57
:o Dat ik daar nog niet aan gedacht had 8)7 Briljant gewoon.


:)

Guess what we are not stupid, just ignorant!


  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Mir schreef op 10 september 2002 @ 15:50:
als we dan toch al ranzig bezig zijn ;)
Winner of the day: je installeert tijdelijk een systemwide hook die alle WM_PAINT messages rechtstreeks de vuilnisbak inkiepert, en zodra je operatie klaar is invalidate je de hele desktop.

Of je doet gewoon zoals ik vanochtend al suggereerde even met LockUpdate netjes de repaints blokkeren en dan ben je ook klaar zonder ranzigheid...

* curry684 vraagt zich af of mensen wel eens naar 'm luisteren.

Professionele website nodig?


  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 13:54

Crazy D

I think we should take a look.

curry684 schreef op 10 september 2002 @ 16:19:
Winner of the day: je installeert tijdelijk een systemwide hook die alle WM_PAINT messages rechtstreeks de vuilnisbak inkiepert, en zodra je operatie klaar is invalidate je de hele desktop.
:D Da's wel een echte (8> oplossing :D
* curry684 vraagt zich af of mensen wel eens naar 'm luisteren.
:X

;)

Exact expert nodig?


  • Mir
  • Registratie: Maart 2001
  • Niet online

Mir

curry684 schreef op 10 september 2002 @ 16:19:
[...]

* curry684 vraagt zich af of mensen wel eens naar 'm luisteren.
agrees... Maar ik ga dan maar met de golf mee in de hoop dat ...
Of je doet gewoon zoals ik vanochtend al suggereerde even met LockUpdate netjes de repaints blokkeren en dan ben je ook klaar zonder ranzigheid...
* Mir Dekt zich even in
Ik noemde het dan .Redraw, maar ik zat niet achter VB en wist de benaming niet..

[ Voor 0% gewijzigd door Mir op 10-09-2002 16:45 . Reden: indekken ]


  • Unifex
  • Registratie: Juni 2002
  • Laatst online: 02-04 13:57
curry684, ik ben altijd leergierig en zou graag dat stukje code van die lockupdate in vb willen zien. (m.b.t. tot die listview dan :) )

Bijvoorbaat dank.

Guess what we are not stupid, just ignorant!


Verwijderd

creeer een nieuwe op de voorgrond. . . hide de ouwe .. en flush hem dan pas. . . dan ziet de user de nieuwe. . .dus zietie geen delay :)

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Unifex schreef op 10 september 2002 @ 16:49:
curry684, ik ben altijd leergierig en zou graag dat stukje code van die lockupdate in vb willen zien. (m.b.t. tot die listview dan :) )
Mijn VB is net zoals de taal zelf: belabberd :)

Professionele website nodig?


  • Sponge
  • Registratie: Januari 2002
  • Laatst online: 28-08 17:06

Sponge

Serious Game Developer

code:
1
2
3
4
5
6
7
8
decl:
Public Declare Function LockWindowUpdate Lib "user32" (ByVal hwndLock As Long) As Long

sub:

lockwindowupdate listview.hwnd
listview.listitems.clear
lockwindowupdate 0


Uit m'n hoofd, maar dit moet gewoon werken

  • Mir
  • Registratie: Maart 2001
  • Niet online

Mir

Mir schreef op 10 september 2002 @ 15:50:
Je kan er desnoods nog een fake listbox achter zetten waardoor het lijkt alsof 'ie gelijk leeg is (disable die fake dan ofzo).

als we dan toch al ranzig bezig zijn ;)
Verwijderd schreef op 10 september 2002 @ 16:51:
creeer een nieuwe op de voorgrond. . . hide de ouwe .. en flush hem dan pas. . . dan ziet de user de nieuwe. . .dus zietie geen delay :)
Gamma
curry684 schreef op 10 september 2002 @ 16:54:
[...]

Mijn VB is net zoals de taal zelf: belabberd :)
Je had dan het eerste stuk er niet bij hoeven doen hoor...
Mensen die dit beweren hebben er idd geen kennis van!

En laten we hier niet daarover discuseren...maar ooit van "efficientie" gehoord?


[edit]

als reply maar zonder nieuwe post:
Ik had het niet over of VB stabiel, snel, goed en blabla is...organisatorisch..

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 13-08 16:46

curry684

left part of the evil twins

Learn to read the smiles.... ennuh laten we er hier niet over discussieren maar het vervolgens wel aansnijden: efficientie begint bij een stabiele IDE, wat VB6 iig niet is.

:z

Professionele website nodig?


  • robjanssen
  • Registratie: September 2001
  • Laatst online: 02-08 16:10

robjanssen

Software Developer

Ik heb ergens gelezen dat de Clear methode erg langzaam is.

Het gaat veel sneller om met een For-lus alles items te doorlopen en dan steeds RemoveItem te doen.

  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 31-08 15:46

mulder

ik spuug op het trottoir

Mir schreef op 10 september 2002 @ 15:50:
Je kan er desnoods nog een fake listbox achter zetten waardoor het lijkt alsof 'ie gelijk leeg is (disable die fake dan ofzo).

als we dan toch al ranzig bezig zijn ;)
misschien gewoon een frame, sunken, bgcolor white

oogjes open, snaveltjes dicht

Pagina: 1