[VB6] Memory Leak probleem

Pagina: 1
Acties:

  • Chielos
  • Registratie: Maart 2003
  • Laatst online: 17-11-2025

Chielos

Inno Mini Cooper

Topicstarter
Ik ben bezig met een project met redelijk veel controls die constant op het scherm geplaatst/verwijderd worden bij het veranderen van scherm.

Maar na een half uur werken met de applicatie of een x aantal keer "verversen" van het scherm geeft de applicatie een Memory error. Ik zie overigens in de taakplanner ook het geheugen oplopen (300 kb per refresh)

Wat kan de oorzaak hiervan zijn? Worden de controls wel volledig uit het geheugen gehaald? Ik heb overigens wel de controls netjes ge-removed. En hoe kan ik de oorzaak anders vinden, memory debugger? Is er misschien een functie "memory clear", of iets in die geest?

Alvast bedankt!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

VB6 is een wandelende memory leak helaas, ik geef je weinig kans om dit te herstellen zonder naar een ander platform/taal te migreren.

Professionele website nodig?


  • Chielos
  • Registratie: Maart 2003
  • Laatst online: 17-11-2025

Chielos

Inno Mini Cooper

Topicstarter
is omzetten naar VB.NET een oplossing?

Overigens is deze applicatie een herziene versie van een oude vb6 applicatie die memleak vrij was.
Deze applicatie had overigens geen controls, dus vandaar mijn vraag.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Chielos schreef op 11 juni 2004 @ 11:21:
is omzetten naar VB.NET een oplossing?

Overigens is deze applicatie een herziene versie van een oude vb6 applicatie die memleak vrij was.
Deze applicatie had overigens geen controls, dus vandaar mijn vraag.
Omzetten naar VB.NET is een aardig karwei: ze zijn minder compatible dan de namen impliceren en de VB6 migration wizard doet minder wonderen dan je zou mogen hopen.

Dat je applicatie er tig keer stabieler van wordt staat echter buiten kijf ;)

Professionele website nodig?


  • Chielos
  • Registratie: Maart 2003
  • Laatst online: 17-11-2025

Chielos

Inno Mini Cooper

Topicstarter
Ik had vorige week voor de grap eens die wizard gestart, maar die ging binnen 4 forms meteen zwaar op z'n bek..

Toen kon ik die wizard gaan debuggen met Visual studio ;)

Maar dan moet ik daar eens serieus rekening mee gaan houden..

  • MaNDaRK
  • Registratie: Oktober 2001
  • Laatst online: 20-05 14:37
Er is momenteel SP6 (Service Pack 6) uit voor Visual Basic 6.

Bij mij maakte dit wel verschil uit met dit soort problemen :)

  • Chielos
  • Registratie: Maart 2003
  • Laatst online: 17-11-2025

Chielos

Inno Mini Cooper

Topicstarter
ok! zal eens kijken dan :)

waar kan ik dat downloaden? :P

[edit]
heb hem al ;)

[ Voor 58% gewijzigd door Chielos op 11-06-2004 11:45 ]


  • Chielos
  • Registratie: Maart 2003
  • Laatst online: 17-11-2025

Chielos

Inno Mini Cooper

Topicstarter
Ok, ik heb de servicepack geinstalleerd maar dat maakt dus geen verschil..
Was een goede poging, maar jammergenoeg helpt het niet :|

Ik ga weer verder zoeken.

  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

Heb je veel formulieren in een window draaien? Of allemaal losse?
Je zou eens kunnen kijken om ze los te maken.. en losse executables te maken. Deze kun je dan met een api call in vb killen, zonder maar een memory leak achter te laten.
Btw overal in de modules option explicit wel aan staan? Hoeveel objecten heb je gedimmed in de code?

[ Voor 3% gewijzigd door henkleerssen op 11-06-2004 12:44 ]


  • Twee Dee
  • Registratie: Juli 2002
  • Laatst online: 12:46

Twee Dee

Morgen weer een ondertitel.

Ik heb zelf ook een project gedaan (nu trouwens nog steeds) waarbij er ook in uitgebreide schermen meer dan 150 controls worden geladen. Dit gaat gewoon goed zonder memory problemen.

Op wat voor manier maak jij de controls aan, controlarrays neem ik aan?
En op wat voor manier verwijder je de controls, misschien gaat er hier iets fout?
Heb je niet misschien nog een boel verwijzingen die niet worden opgeschoond?
etc.

Bij mijn project heb ik trouwens gemerkt dat het op false zetten van de property "HasDC" een hele berg scheelt in performance bij controls.

Luister nou gewoon naar me, dat voorkomt dat ik later "zie je wel" moet zeggen.


  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

Twee Dee schreef op 11 juni 2004 @ 12:50:
Ik heb zelf ook een project gedaan (nu trouwens nog steeds) waarbij er ook in uitgebreide schermen meer dan 150 controls worden geladen. Dit gaat gewoon goed zonder memory problemen.

Op wat voor manier maak jij de controls aan, controlarrays neem ik aan?
En op wat voor manier verwijder je de controls, misschien gaat er hier iets fout?
Heb je niet misschien nog een boel verwijzingen die niet worden opgeschoond?
etc.

Bij mijn project heb ik trouwens gemerkt dat het op false zetten van de property "HasDC" een hele berg scheelt in performance bij controls.
ik denk persoonlijk ook dat er eerder iets fout is met de code (of ook dat je daar wat optimalisaties zou kunnen doen) en niet specifek met vb6

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Twee Dee schreef op 11 juni 2004 @ 12:50:
Bij mijn project heb ik trouwens gemerkt dat het op false zetten van de property "HasDC" een hele berg scheelt in performance bij controls.
Die property mapped vermoed ik naar de Windows class style CS_OWNDC, die een tradeoff van geheugen voor performance inhoudt. Een control met een eigen DC houdt meer geheugen vast maar kan sneller repainten. Meer geheugen verbruiken kan echter weer inhouden dat je systeem trager word...

Professionele website nodig?


  • Twee Dee
  • Registratie: Juli 2002
  • Laatst online: 12:46

Twee Dee

Morgen weer een ondertitel.

curry684 schreef op 11 juni 2004 @ 12:58:
[...]
Die property mapped vermoed ik naar de Windows class style CS_OWNDC, die een tradeoff van geheugen voor performance inhoudt. Een control met een eigen DC houdt meer geheugen vast maar kan sneller repainten. Meer geheugen verbruiken kan echter weer inhouden dat je systeem trager word...
Zit er niet meer achter deze property? Ik geloof dat deze property er ook voor zorgt dat een control wel of niet globaal te vinden is, dus eventueel zelfs vanuit andere programma's.
De controls laden namelijk ook veel sneller en het lijkt me niet dat dat komt doordat ze meer geheugen vasthouden, aangezien ze dan kersvers zijn.

Ik weet in ieder geval niet het fijne van de property (dat is duidelijk ;) ) maar in mijn geval heeft het veel uitgemaakt, dus ik wilde het in ieder geval genoemd hebben.

Anyway, dit begint redelijk offtopic te gaan, dus ik adviseer de TS nogmaals om even na te kijken of alle controls echt wel netjes worden opgeruimd (misschien blijf je bij een refresh wel steeds weer nieuwe controls laden over de bestaande heen?).

Luister nou gewoon naar me, dat voorkomt dat ik later "zie je wel" moet zeggen.


  • Chielos
  • Registratie: Maart 2003
  • Laatst online: 17-11-2025

Chielos

Inno Mini Cooper

Topicstarter
clear

code:
1
2
3
4
5
6
7
8
    Dim clbl As Control

    For Each clbl In mainFrame.Controls
        If Left(clbl.name, 6) = "d_ctrl" Then
            mainFrame.Controls.Remove clbl.name
            Set clbl = Nothing
        End If
    Next


Dit is mijn code die zorgt voor de opruiming van mijn controls. Meer kan ik er niet van maken. Wat bedoel je precies met Controlarrays?

bij het toevoegen gebruik ik overigens add..

  • Twee Dee
  • Registratie: Juli 2002
  • Laatst online: 12:46

Twee Dee

Morgen weer een ondertitel.

Ik denk dat je probleem opgelost is als je:

Visual Basic:
1
Set clbl = Nothing


Vervangt door:
Visual Basic:
1
Unload clbl

Luister nou gewoon naar me, dat voorkomt dat ik later "zie je wel" moet zeggen.


Verwijderd

Zou moeten werken inderdaad! Zelf trouwens de ervaring met VB dat geheugen problemen veelal aan de programmeur en niet VB ligt. In SP5 hebben ze volgensmij nog wel een aantal geheugenlekken in het Winsock control gedicht. Gelukkig.

  • Chielos
  • Registratie: Maart 2003
  • Laatst online: 17-11-2025

Chielos

Inno Mini Cooper

Topicstarter
Ok bedankt voor de reply, maar het helpt me jammergenoeg ook niet..
Hij geeft een melding dat clbl niet meer bestaat, ik heb het ook gebeurt met dim clbl as object en het omdraaien van de 2 regels heeft ook niet geholpen.

Heeft iemand nog een idee?:s
Pagina: 1