MailMan13 Skrevet 21. januar 2008 Del Skrevet 21. januar 2008 (endret) Jeg har dessverre havnet på forvaltningsgruppa til en eldre applikasjon skrevet i ASP 1.0 og VB 6.0 COM-objekter (yuck ) Jeg har gravd litt i koden for å bli kjent med makkverket, og ser stadig vekk statements som dette på slutten av prosedyrer: Set myObject = Nothing Etter det jeg vet bruker GC'en i gammel VB reference-counter for å rydde opp gamle objekter og det å sette objektet til 'Nothing' vil, i motsetning til .NET/Java, utløse ødelegging av objektet øyeblikkelig om telleren er 0 etterpå. Men er dette noe vits? Vil ikke referansetelleren gå til 0 automatisk når prosedyren er ferdig og referansen forsvinner ut av scope, slik at GC plukker med seg objektet ved neste anledning? Kan skjønne at det av og til kan være greit å frigjøre ressurser med en gang, men dette er et gammelt transaksjonsbasert system, noe sekunder med et par kB for mye i minnet er ikke akkurat vesentlig. Endret 21. januar 2008 av MailMan13 Lenke til kommentar https://www.diskusjon.no/topic/898793-vb-60-eksplisitt-%C3%B8delegge-objekter-noe-vits/
GeirGrusom Skrevet 21. januar 2008 Del Skrevet 21. januar 2008 Vel , jeg lærte at man skal sette dem lik null, om det egentlig er noe poeng, vet jeg ikke. Men uansett så tror jeg hensikten er å lukke databaseforbindelser, ikke for å spare RAM. Lenke til kommentar https://www.diskusjon.no/topic/898793-vb-60-eksplisitt-%C3%B8delegge-objekter-noe-vits/#findComment-10395625
MailMan13 Skrevet 21. januar 2008 Forfatter Del Skrevet 21. januar 2008 (endret) Nå er jeg ganske fersk på 6.0, men hvis det er slik at databasetilkoblinger åpnes når connection-objektet instansieres og lukkes når det destrueres er jo det fornuftig å ikke holde den åpen mens man venter på GC. (er vant med eksplisitte open/close statements for sånt). Nå er det ikke så mange av disse objektene som holder har direkte databasetilkobling, det er pakket inn i en egen DLL. Når jeg ser på koden der ser det ut som tilkoblinger lages og slippes for hvert kall. Men man lager altså ikke noe minnelekasjer eller holder permanent på noen ressurser om man ikke gjør det? Endret 21. januar 2008 av MailMan13 Lenke til kommentar https://www.diskusjon.no/topic/898793-vb-60-eksplisitt-%C3%B8delegge-objekter-noe-vits/#findComment-10395799
GeirGrusom Skrevet 21. januar 2008 Del Skrevet 21. januar 2008 Ærlig talt vet jeg ikke, men VB 6.0 bruker COM sitt GC system, som består av en AddRef og en Release funksjon. Release og AddRef er blir kalt når objektet blir referert, og det kan muligens hende da at Release ikke blir kalt hvis ikke man setter referansen lik null. Men nok en gang, så snakker jeg på grunnlag av troing og synsing, fordi jeg er blitt fortalt at man skal sette objekter lik null i VB6, og jeg har egentlig ikke satt noen spørsmålstegn rundt det. Lenke til kommentar https://www.diskusjon.no/topic/898793-vb-60-eksplisitt-%C3%B8delegge-objekter-noe-vits/#findComment-10396320
Harald Staff Skrevet 21. januar 2008 Del Skrevet 21. januar 2008 Det har alltid vært god skikk å rydde etter seg, også fordi man har full kontroll på hvor lenge objekter lever og hvor. Om det egentlig er noe vits "når mutter'n rydder allikavæl", vel kanskje oftest ikke. Men com-objekter oppfører seg forskjellig, dersom MyObject er Access vil den oppføre seg helt annerledes enn om det er Excel ved terminering. Så du er ikke garantert at GC aldri vil gi deg minnelekkasjer eller pussige bieffekter selv om det oftest går helt greitt. Det er antakelig ikke et makkverk heller hvis det er såpass ryddig programmert. Beste hilsen Harald Lenke til kommentar https://www.diskusjon.no/topic/898793-vb-60-eksplisitt-%C3%B8delegge-objekter-noe-vits/#findComment-10396714
MailMan13 Skrevet 22. januar 2008 Forfatter Del Skrevet 22. januar 2008 Makkverk er det kanskje ikke i den forstand, men det kan vel kanskje sies at den "har har overlevd sin økonomiske og tekniske levetid" som det heter på fint... Når det går på reference counting er det mamma som tydder uansett, spørsmålet var om det er forskjell på å si ifra at hun skal rydde (ved å redusere telleren til null selv) eller om hun finner ut av det selv (ved å la telleren gå til null når referansen likevel forsvinner) like effektivt. Lenke til kommentar https://www.diskusjon.no/topic/898793-vb-60-eksplisitt-%C3%B8delegge-objekter-noe-vits/#findComment-10401430
Harald Staff Skrevet 22. januar 2008 Del Skrevet 22. januar 2008 Da tror jeg svaret er at garbage collector i VB6 ikke er fullt så pålitelig som de i .net eller java. Men jeg kan ikke egentlig dokumentere det. Beste hilsen Harald Lenke til kommentar https://www.diskusjon.no/topic/898793-vb-60-eksplisitt-%C3%B8delegge-objekter-noe-vits/#findComment-10402360
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå