Toon posts:

Probleem met VB usercontrols

Pagina: 1
Acties:

Verwijderd

Topicstarter
Groot probleem, ik heb hier een heeel mooi usercontrol gemaakt. Dit usercontrol is een soort van grid, en laad per row weer een usercontrol in die de nieuwe regel voorstelt. Dat werkt allemaal heel leuk, en ik kan meerdere van deze grids met vele rows op een formulier plaatsen.

Allemaal geen probleem...

Maar...

Ik heb XP. Nu gaat dezelfde applicatie naar een Windows 95 / 98 omgeving ( die nou net de klant ook gebruikt ). Zodra er net iets meer dan 120 rijen ( usercontrols ) geladen worden, geeft de applicatie een "OUT OF MEMORY", en de hele applicatie crashed.

Dit lijkt me toch een soort probleem van het OS ( de PC heeft immers 128 MB!!! ), en ik hoop dat jullie misschien een oplossing hiervoor hebben ( of een patch of iets dergelijks ).

  • whoami
  • Registratie: December 2000
  • Laatst online: 19:58
Hmmm..... memory leakjes ?
Als je voor iedere row nog een control gaat inladen kan ik me wel voorstellen dat dat geheugen slurpt.

https://fgheysels.github.io/


Verwijderd

t is vb kleine kans dat je daar memleaks hebt tenzij het in de componenten zit die je gebruikt. denk eerder dat er wellicht 'n versie verschil zit in de common controls versie op beide systemen.

Verwijderd

Win9x is helemaal hopeloos en heeft een heel raar management systeem voor GDI resources. Als al die usercontrols allemaal een eigen windowtje hebben (al zie je dat niet) kan ik me voorstellen dat ie gewoon door z'n GDI resources heen raakt. Kijk eens naar je systeem bronnen en zie of dat het probleem is?

Verwijderd

Topicstarter
Bedankt voor het snelle reageren allemaal.

Op XP gebruikt het hele progje, met alle rows maximaal geladen 26.208 Kb, de taakbeheerder geeft aan geheugenbereik: 160/1250 MB. Deze heeft er dus zeer waarschijnlijk geen problemen mee.

Op Windows 95 / 98 ga ik het nu ook proberen, moet ik alleen even uitvinden waar de grens zit in records die ik ongeveer mag hebben.

Het zou inderdaad ook kunnen dat usercontrols als window worden gezien, slimme opmerking... maar wat kan ik daar dan aan doen?

Verwijderd

Topicstarter
Het gaat om een "Runtime error '7'" - Out of memory. Ik heb net op de Windows 95 bak ook weer even de error laten optreden, maar schaam ik heb geen idee hoe je in windows ook alweer de geheugenstatus kan achterhalen ( niet via taakmanager ), misschien via dat systeembronnen programmatje, maar die staat er niet op :(

Ik denk alleen wel dat het daar aan zou liggen. Je kan in VB ook voor usercontrols de optie 'windowless' op true zetten, helaas krijg ik dan de melding :

'Can't have windowed child controls on a windowless control'

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

Crazy D

I think we should take a look.

Er zit een limiet op het aantal controls, zo'n geintje had ik een keer, in NT4 werkte het prima alleen in w95 ging ie bij een paar 100 controls (was overigens ook een soort grid) over de zeik...
Je kan dan beter de gegevens zelf in een array/class/collectie/whatever in het geheugen opslaan, en alleen die controls tekenen die zichtbaar zijn. Is in 1e instantie wel wat meer werk trouwens, maar als het 1 keer goed werkt is het stukken sneller, ook als je ff omlaag scrollt (of via pagedown). En tenzij de gebruiker een giga resolutie heeft, kom je dan ook nooit in dat soort problemen.
(en waarom zou je de gebruiker opzadelen met een paar 100 controls terwijl is misschien 10 regels tegelijk kan zien).

Exact expert nodig?


Verwijderd

Topicstarter
Crazy_D schreef op 25 september 2002 @ 16:18:
Er zit een limiet op het aantal controls, zo'n geintje had ik een keer, in NT4 werkte het prima alleen in w95 ging ie bij een paar 100 controls (was overigens ook een soort grid) over de zeik...
Je kan dan beter de gegevens zelf in een array/class/collectie/whatever in het geheugen opslaan, en alleen die controls tekenen die zichtbaar zijn. Is in 1e instantie wel wat meer werk trouwens, maar als het 1 keer goed werkt is het stukken sneller, ook als je ff omlaag scrollt (of via pagedown). En tenzij de gebruiker een giga resolutie heeft, kom je dan ook nooit in dat soort problemen.
(en waarom zou je de gebruiker opzadelen met een paar 100 controls terwijl is misschien 10 regels tegelijk kan zien).
Krijg ik dan geen problemen als ik al die usercontrols in een control laad? Dan zou die daar toch ook allemaal window handlertjes moeten hebben? Het klint overigens wel als een mega- oplossing ( en de redding voor mijn control ).

Maar het blijft ook wel erg apart dat het alleen met W95 en W98 fout gaat. Dan moet er toch ook daar iets te doen zijn?

Verwijderd

Het probleem zit hem (zoals al eerder is gezegd) in de hoeveelheid controls. VB gaat gewoon op een gegeven moment over de zeik :(. De enige manier om dat op te lossen is dus idd door het aantal controls terug te brengen. Je zegt dat het om een soort grid gaat, kan je dan niet gewoon een normaal grid (of flexgrid gebruiken) en dan op het moment dat de gebruiker een bepaalde row selecteerd, daar een bepaald (user)control overheen leggen. Dat is veel zuiniger in gebruik :). Maar ik weet niet precies wat je doel is...

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

Crazy D

I think we should take a look.

Verwijderd schreef op 25 september 2002 @ 17:23:
Krijg ik dan geen problemen als ik al die usercontrols in een control laad? Dan zou die daar toch ook allemaal window handlertjes moeten hebben? Het klint overigens wel als een mega- oplossing ( en de redding voor mijn control ).

Maar het blijft ook wel erg apart dat het alleen met W95 en W98 fout gaat. Dan moet er toch ook daar iets te doen zijn?
Tjah win9x :X

Je krijgt juist nu een probleem omdat je voor alle regels de regel-control laadt. Als je bv 10 regels tegelijk in beeld hebt, laad je 10 regel-controls, en vul je die met de regels die de gebruiker wil zien (dus je begint met 1 t/m 10, drukken ze op een scrollknop of whatever om er eentje lager te gaan, vul je die 10 controls met de regels 2 t/m 11 die je in het geheugen hebt zitten. Je zal dan dit probleem ook niet meer krijgen, omdat er niet zoveel controls tegelijk getoont worden (maximaal het aantal regels dat er op het scherm passen).

Wat bedoel je met window handlertjes? Events? "handles" (hwnd dus) ?

Klinkt misschien wat cryptisch (en ik kan ook zo lekker uitleggen 8)7 ) ik vond het zelf het makkelijkste om ff te proberen met een array van een paar txtboxjes, en een string array met de data die ik wil tonen, en daar wat mee gaan stoeien. je begint met de 1e n items uit je array (uiteraard net zoveel als dat je txtboxjes hebt :P) en daar wat mee spelen, uitvogelen hoe je nou in bv een change event "weet" met welke "echte" regel (dus welke item in de string-array) je bezig bent, en toen werd het voor mij iig vrij snel duidelijk. Ik denk dat als je er over nadenkt het vager lijkt dan dat het is. (of misschien kan iemand die wel kan uitleggen het wat duidelijker beschrijven ;)). Ik weet dat er wat "virtual listbox"jes rondzwerven op het net die doen wat ik bedoel, alleen dan als listbox (ze vullen dus niet alle 10000 listitems in de listbox, maar alleen die x-aantal die je ziet. De rest staat in het geheugen, en door de scrollevents etc af te vangen "scrollen" ze mee in de array in het geheugen met de daadwerkelijke data en vullen de list met enkel die items die zichtbaar zijn).

Exact expert nodig?

Pagina: 1