Gå til innhold

Anbefalte innlegg

Jeg holder paa med en simulation program naa. Problem er at det kommer en " Out of stack" error message naar simulation size overstiger 1000. Vet at det er noen ting med minne aa gjoere. Har dere noen forslag om hvordan jeg kan fjerne/utvide denne begrensning?

Lenke til kommentar
Videoannonse
Annonse

Denne feilmeldingen kan ha flere årsaker, men den vanligste er en altfor hyppig bruk av DoEvents. Prøv heller å bruke koder som Me.Refresh eller Control.Refresh. Dessuten er det også viktig å merke at når du kaller DoEvents kan andre hendelser som ikke burde blitt kalt, bli det. Hvis du f.eks har en Timer og flere DoEvents kaller i denne hendelsen, kan det bli mulig at hendelsen kaller seg igjen før den andre er ferdig. Prøv da å hindre at Timer kalles flere ganger med å bruke Tag egenskapen, som du f.eks setter til 1 etter du har sjekket at den er tom. Når prosedyren avslutter igjen, setter du egenskapen til 0.

 

Det er også mulig at feilmeldingen oppstår pga. lokale variabler som bruker mer plass enn det som er tilgjengelig. Hvis dette er tilfellet kan du prøve å deklarere variablene i en modul, eller sette nøkkelordet Static forann prosedyrene eller variablene.

 

Også unngå bruken av fixed-length strenger. Disse er mye raskere enn varable strenger, men tar opp hele sinn plass i stack-minnet. Fixed-lenght strenger deklareres slik: Dim Variable As String * 50. I dette eksempelet kan du deklarere variabelen sånn: Dim Variable As String.

 

Til slutt må du også sjekke at du ikke har altfor mangen aktive Functions, Subs og Properties. Sjekk om ingen av disse kaller seg selv på en eller annen måte.

Endret av aadnk
Lenke til kommentar

Jeg forstaar ikke helt det med DoEvents, mente du det med en metode kall eller? Hva er me.refresh og controll.refresh?

 

Du nevnte ogsaa det med fixed length String, vil det samme gjelder med fix length array ogsaa?

Lenke til kommentar

Det samme vil ikke gjelde for fixed-lenght arrayer. Og hva jeg mente med DoEvents. var ganske enkelt at du burde ikke bruke denne så ofte. Hvis du f.eks skal oppdatere en kontroll innenfor en Do-Loop er det smartere å bruke Control.Refresh (Control skal altså erstattes med kontrollens navn) istedenfor DoEvents.

 

Prøv å legg variablene dine i en modul, eller sett nøkkelordet Static forann og se hva som skjer.

Lenke til kommentar

Takk for tipset

 

Jeg proevde aa erstatte alle Private med Static, det hjalp litt, grense har utvide fra 1005 til 1052, men forsatt ikke mange nok...

 

Jeg skjoente forsatt ikke hva er en egentlig DoEvent og hva en *.refresh vil gjoere paa program mitt.... Er det mulig aa forklare det med en eksempel?

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...