Avatar billede the_party_dog Nybegynder
06. december 2004 - 08:52 Der er 12 kommentarer og
1 løsning

return statement

Når jeg returner noget fra en funktion, stopper den så der?

Jeg tænker på hvordan man rydder op efter sig, så man får frigivet al den hukommelse man kan. Jeg har mange funktioner som roder med datetime, dataset, og adapter. Hvordan gør man det bedst når man gerne vil frigive de forskellige ting?

Skal man bare sætte sine DataSet's = null? Når man forlader en funktion, kan GC så opsamle den hukommelse de forskellige i den lige afsluttet funktion?
Avatar billede wisen Nybegynder
06. december 2004 - 08:55 #1
Ja, en metode "stopper" når du laver en "return" - men du kan faktisk lave en try-catch-finally.. og finally delen vil altid blive kørt.

Normalt er det ikke nødvendnig at null'e din variable hvis de er lokale...
Avatar billede the_party_dog Nybegynder
06. december 2004 - 08:57 #2
De er lokale, men vil gerne lære at gøre det rigtigt.

Vil gerne høre hvordan folk afslutter deres ting, og hvordan man kan gøre det så godt som muligt, og få GC til at opsamle så meget som muligt.
Avatar billede erikjacobsen Ekspert
06. december 2004 - 09:06 #3
Hvis du har sagt xxx.Open() bør du også sige xxx.Close()  (og tilsvarende for andre
symmetriske operationer). Ud over det skal du ikke foretage dig noget for lokale
variabler.
Avatar billede the_party_dog Nybegynder
06. december 2004 - 09:08 #4
hvad så hvis jeg kaster med dataset mellem mine funktioner? Så når jeg exit'er den ene funktion, så nedlægger den dataset'et som var lokalt, og så vil GC gøre resten af arbejdet?
Avatar billede wisen Nybegynder
06. december 2004 - 09:09 #5
mange gang er man bedre hjulpet ved at bruge et "using" statement... som erikjacobsen skriver skal man bruge xxx.Close hvis man har brugt xxx.Open - men f.eks database connections kan man putte i et using statement og så vil den automatisk blive lukket på blokken forlades - uanset hvordan det gøres... f.eks. via return eller man smider en exception osv.
Avatar billede erikjacobsen Ekspert
06. december 2004 - 09:10 #6
"kaster med dataset" ?  Så længe der er en reference til et objekt, vil det ikke snuppet af din garbagecollector.
Avatar billede the_party_dog Nybegynder
06. december 2004 - 09:13 #7
Har ikke 100% forståelse for om jeg bare giver en reference videre. Jeg har f.eks en funktion som returnere et dataset, like this:

public static System.Data.DataSet SqlGetData(string dbName)
{

}

som jeg kalder like this:

ColData = SqlGetDate("Names");

Er det så bare en reference jeg laver?
Avatar billede erikjacobsen Ekspert
06. december 2004 - 11:26 #8
ja
Avatar billede the_party_dog Nybegynder
07. december 2004 - 16:01 #9
any one drop an answer ;)
Avatar billede wisen Nybegynder
08. december 2004 - 08:47 #10
et lille svar herfra ;)
Avatar billede wisen Nybegynder
21. december 2004 - 09:07 #11
Tid til at lukke spørgsmålet ?
Avatar billede the_party_dog Nybegynder
21. december 2004 - 09:08 #12
sorry....

Det havde jeg glemt! :(
Avatar billede wisen Nybegynder
21. december 2004 - 09:11 #13
hehe - no problem, takker for point ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester