/ Forside / Teknologi / Udvikling / VB/Basic / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
VB/Basic
#NavnPoint
berpox 2425
pete 1435
CADmageren 1251
gibson 1230
Phylock 887
gandalf 836
AntonV 790
strarup 750
Benjamin... 700
10  tom.kise 610
Frigørelse af hukommelse
Fra : Thomas Larsen


Dato : 23-07-01 13:53

Hejsa!

Jeg har et problem, med et program der bruger mere og mere hukommelse, jo
længere det kører. Programmet henter oplysninger i en database, i et bestemt
tidsinterval. Problemer er bare, at for hver gang, sub funktionen køres, så
reservere programmet lidt mere hukommelse i maskinen, med det resultat at
maskinen på et tidspunkt går ned.

Er der nogen der har forslag til hvordan dette kan løses? Findes er en
metode der kan tømme alle variabler evt?

Se kode eksempel nedenunder!

Mvh.
Thomas

Private Sub TimerSer_Timer()
Call GetServiceInfo()
End Sub

Private Sub GetServiceInfo()

Dim WS As Workspace
Dim CN As Connection
Dim RS As Recordset

Set WS = CreateWorkspace(Bla, bla....)
Set CN = WS.OpenConnection(bla, bla....)
Set RS = CN.OpenRecordset(SQL sætning, dbReadOnly)
....
....
RS.Close
CN.Close
RS.Close

End Sub








 
 
Erlend Klakegg Bergh~ (23-07-2001)
Kommentar
Fra : Erlend Klakegg Bergh~


Dato : 23-07-01 14:52

Thomas Larsen <test@test.dk> skrev i
news:3b5c1e22$0$9444$4d4eb98e@read.news.dk.uu.net
> Hejsa!
>
> Jeg har et problem, med et program der bruger mere og mere hukommelse, jo
> længere det kører. Programmet henter oplysninger i en database, i et
bestemt
> tidsinterval. Problemer er bare, at for hver gang, sub funktionen køres,

> reservere programmet lidt mere hukommelse i maskinen, med det resultat at
> maskinen på et tidspunkt går ned.
>
> Er der nogen der har forslag til hvordan dette kan løses? Findes er en
> metode der kan tømme alle variabler evt?
>
> Se kode eksempel nedenunder!
>
> Mvh.
> Thomas
>
> Private Sub TimerSer_Timer()
> Call GetServiceInfo()
> End Sub
>
> Private Sub GetServiceInfo()
>
> Dim WS As Workspace
> Dim CN As Connection
> Dim RS As Recordset
>
> Set WS = CreateWorkspace(Bla, bla....)
> Set CN = WS.OpenConnection(bla, bla....)
> Set RS = CN.OpenRecordset(SQL sætning, dbReadOnly)
> ...
> ...
> RS.Close
Set RS = Nothing
> CN.Close
Set CD = Nothing
> RS.Close
Set RS = Notiung
>
> End Sub

Håper det virker bedre ... =)

--

Vennlig hilsen Erlend
erlendkb@c2i.net
ICQ 42053660
http://www.kleggen.com/



Barney Gumble (23-07-2001)
Kommentar
Fra : Barney Gumble


Dato : 23-07-01 14:57



"Thomas Larsen" <test@test.dk> skrev i en meddelelse
news:3b5c1e22$0$9444$4d4eb98e@read.news.dk.uu.net...
> Hejsa!
>
> Jeg har et problem, med et program der bruger mere og mere hukommelse, jo
> længere det kører. Programmet henter oplysninger i en database, i et
bestemt
> tidsinterval. Problemer er bare, at for hver gang, sub funktionen køres,

> reservere programmet lidt mere hukommelse i maskinen, med det resultat at
> maskinen på et tidspunkt går ned.
>
> Er der nogen der har forslag til hvordan dette kan løses? Findes er en
> metode der kan tømme alle variabler evt?
>
> Se kode eksempel nedenunder!
>
> Mvh.
> Thomas
>
> Private Sub TimerSer_Timer()
> Call GetServiceInfo()
> End Sub
>
> Private Sub GetServiceInfo()
>
> Dim WS As Workspace
> Dim CN As Connection
> Dim RS As Recordset
>
> Set WS = CreateWorkspace(Bla, bla....)
> Set CN = WS.OpenConnection(bla, bla....)
> Set RS = CN.OpenRecordset(SQL sætning, dbReadOnly)
> ...
> ...
> RS.Close
> CN.Close
> RS.Close
>
> End Sub

Prøv at lige tilføje efter XX.Close
Set RS = Nothing
Set CN = Nothing

Har du tænkt at prøve at bruge ADO istedet for DAO?

BG



Thomas Larsen (23-07-2001)
Kommentar
Fra : Thomas Larsen


Dato : 23-07-01 16:34

Mange tak for forslaget, men det hjælper desværre ikke. Langt de fleste
resurcer bliver frigivet. Men der mangler lige en lille del hver gang

Nu er jeg ret ny i det, så jeg kender ikke rigtig forskellen mellem ADO og
DAO. Men kan det have noget med problemet at gøre?

Hvis ja, hvordan skal ændre jeg det så til at bruge ADO istedet.

Mvh.
Thomas
Barney Gumble <duff.drinker.nofudd@cornerpub.com> wrote in message
news:9jhada$ese$1@news.cybercity.dk...
>
>
> "Thomas Larsen" <test@test.dk> skrev i en meddelelse
> news:3b5c1e22$0$9444$4d4eb98e@read.news.dk.uu.net...
> > Hejsa!
> >
> > Jeg har et problem, med et program der bruger mere og mere hukommelse,
jo
> > længere det kører. Programmet henter oplysninger i en database, i et
> bestemt
> > tidsinterval. Problemer er bare, at for hver gang, sub funktionen køres,
> så
> > reservere programmet lidt mere hukommelse i maskinen, med det resultat
at
> > maskinen på et tidspunkt går ned.
> >
> > Er der nogen der har forslag til hvordan dette kan løses? Findes er en
> > metode der kan tømme alle variabler evt?
> >
> > Se kode eksempel nedenunder!
> >
> > Mvh.
> > Thomas
> >
> > Private Sub TimerSer_Timer()
> > Call GetServiceInfo()
> > End Sub
> >
> > Private Sub GetServiceInfo()
> >
> > Dim WS As Workspace
> > Dim CN As Connection
> > Dim RS As Recordset
> >
> > Set WS = CreateWorkspace(Bla, bla....)
> > Set CN = WS.OpenConnection(bla, bla....)
> > Set RS = CN.OpenRecordset(SQL sætning, dbReadOnly)
> > ...
> > ...
> > RS.Close
> > CN.Close
> > RS.Close
> >
> > End Sub
>
> Prøv at lige tilføje efter XX.Close
> Set RS = Nothing
> Set CN = Nothing
>
> Har du tænkt at prøve at bruge ADO istedet for DAO?
>
> BG
>
>



Barney Gumble (23-07-2001)
Kommentar
Fra : Barney Gumble


Dato : 23-07-01 17:37

DAO er Access specifik. Der er ADO ikke. Den kører faktisk meget DÅRLIGERE
mod Access end DAO På den anden side hvorfor åbner du og lukker
forbindelse? Hvor tit sker det? Er det ikke bedre at åbne forbindelse
(connection) og recordset og HOLDE åbent så længe det er behov for? Prøv
følgende:

Option Explicit
Private WS As Workspace
Private CN As Connection
Private RS As Recordset

Private Sub Form1_OnLoad()
Set WS = CreateWorkspace(Bla, bla....)
Set CN = WS.OpenConnection(bla, bla....)
Set RS = CN.OpenRecordset(SQL sætning, dbReadOnly)
End Sub

Private Sub Form1_Terminate()

RS.Close
CN.Close

Set RS = Nothing
Set CN = Nothing
Set WS = nothing

End Sub

Private Sub TimerSer_Timer()
Call GetServiceInfo()
End Sub

Private Sub GetServiceInfo()
RS.Refresh
eller
RS.Requery
......
End Sub


BG



Thomas Larsen (26-07-2001)
Kommentar
Fra : Thomas Larsen


Dato : 26-07-01 10:36

God ide! Det har jeg nu gjort og derved "æder" programmet heller ikke RAM
mere

Mange tak for hjælpen.

Mvh.
Thomas

Barney Gumble <duff.drinker.nofudd@cornerpub.com> wrote in message
news:9jhjov$11mr$1@news.cybercity.dk...
> DAO er Access specifik. Der er ADO ikke. Den kører faktisk meget DÅRLIGERE
> mod Access end DAO På den anden side hvorfor åbner du og lukker
> forbindelse? Hvor tit sker det? Er det ikke bedre at åbne forbindelse
> (connection) og recordset og HOLDE åbent så længe det er behov for? Prøv
> følgende:
>
> Option Explicit
> Private WS As Workspace
> Private CN As Connection
> Private RS As Recordset
>
> Private Sub Form1_OnLoad()
> Set WS = CreateWorkspace(Bla, bla....)
> Set CN = WS.OpenConnection(bla, bla....)
> Set RS = CN.OpenRecordset(SQL sætning, dbReadOnly)
> End Sub
>
> Private Sub Form1_Terminate()
>
> RS.Close
> CN.Close
>
> Set RS = Nothing
> Set CN = Nothing
> Set WS = nothing
>
> End Sub
>
> Private Sub TimerSer_Timer()
> Call GetServiceInfo()
> End Sub
>
> Private Sub GetServiceInfo()
> RS.Refresh
> eller
> RS.Requery
> .....
> End Sub
>
>
> BG
>
>



MichaelK (26-07-2001)
Kommentar
Fra : MichaelK


Dato : 26-07-01 11:37

Du skriver i dit eksempel:

> RS.Close
> CN.Close
> RS.Close

Den ene RS.Close skulle gerne være WS.Close. Det står der vel i det rigtige
kode?

Desuden, prøv i denne rækkefølge:

RS.Close
CN.Close
WS.Close
set RS = nothing
set CN = nothing
set WS = nothing

(dvs. først RS, siden CN og WS sidst).

Hilsen
Michael



"Thomas Larsen" <test@test.dk> skrev i en meddelelse
news:3b5c1e22$0$9444$4d4eb98e@read.news.dk.uu.net...
> Hejsa!
>
> Jeg har et problem, med et program der bruger mere og mere hukommelse, jo
> længere det kører. Programmet henter oplysninger i en database, i et
bestemt
> tidsinterval. Problemer er bare, at for hver gang, sub funktionen køres,

> reservere programmet lidt mere hukommelse i maskinen, med det resultat at
> maskinen på et tidspunkt går ned.
>
> Er der nogen der har forslag til hvordan dette kan løses? Findes er en
> metode der kan tømme alle variabler evt?
>
> Se kode eksempel nedenunder!
>
> Mvh.
> Thomas
>
> Private Sub TimerSer_Timer()
> Call GetServiceInfo()
> End Sub
>
> Private Sub GetServiceInfo()
>
> Dim WS As Workspace
> Dim CN As Connection
> Dim RS As Recordset
>
> Set WS = CreateWorkspace(Bla, bla....)
> Set CN = WS.OpenConnection(bla, bla....)
> Set RS = CN.OpenRecordset(SQL sætning, dbReadOnly)
> ...
> ...
> RS.Close
> CN.Close
> RS.Close
>
> End Sub
>
>




Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408929
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste