Passare connessione al costruttore,valore o riferimento?

lunedì 17 novembre 2008 - 17.03

Amodio Profilo | Expert



salve a tutti
ho delle classi in cui invio l'oggetto sqlConnection nel costruttore
il mio dilemma è se impostare il parametro per valore o per riferimento

attualmente il progetto a cui sto lavorando ho il costurttore che accetta
il paramtro come valore, ho paura quindi che mi crei un copia dell'oggetto
connessione, sapete se quando si distrugge la classe anche la chiamata viene
annullata?
oppure devo cambiare in riferimento? in questo modo pongo la variabile come punatore
della connessione?
Public Sub New(ByVal oconn As SqlConnection) ogConn = oconn End Sub

0v3rCl0ck Profilo | Guru

>
>
>salve a tutti
>ho delle classi in cui invio l'oggetto sqlConnection nel costruttore
>il mio dilemma è se impostare il parametro per valore o per riferimento
>
>attualmente il progetto a cui sto lavorando ho il costurttore
>che accetta
>il paramtro come valore, ho paura quindi che mi crei un copia
>dell'oggetto
>connessione, sapete se quando si distrugge la classe anche la
>chiamata viene
>annullata?
>oppure devo cambiare in riferimento? in questo modo pongo la
>variabile come punatore
>della connessione?
>
> Public Sub New(ByVal oconn As SqlConnection)
> ogConn = oconn
> End Sub
>

Passando ByVal stai copiando solamente l'indirizzo di memoria che punta all'oggetto istanziato di tipo SqlConnection. Solo con i value type, quando passati ByRef, viene fatta la copia effettiva del valore. Te l'ho fatta molto in breve, ma ci sarebbe da spendere un libro di parole per vedere tutte le considerazioni profonde che ci sono sull'argomento, quali boxing dei value type, differenze tra reference type e value type, il comportamento del garbage collector, ecc....ecc....


- Michael -
http://blogs.dotnethell.it/Regulator/

Amodio Profilo | Expert

è un discoso contorto
lo ho dovuto rileggere 3 volte
cmq, si mi pare che sei stato chiaro ed anche molto preciso


praticamente io occupo memoria inutile in quanto essendo un oggetto viene duplicato
ma se lo passo per riferimetno dovrei risolvere tutto giusto?=

0v3rCl0ck Profilo | Guru

>è un discoso contorto
>lo ho dovuto rileggere 3 volte
>cmq, si mi pare che sei stato chiaro ed anche molto preciso
>
>
>praticamente io occupo memoria inutile in quanto essendo un oggetto
>viene duplicato
>ma se lo passo per riferimetno dovrei risolvere tutto giusto?=

No, l'oggetto non viene dupplicato, viene copiato solo il riferimento all'oggetto (quindi costa solo di un Numerico, grande a sufficienza per contenere l'indirizzo di memoria, e basta!). Il succo è che i reference type è preferibile passarli ByVal, non ha senso passarli ByRef, e non preoccuparti dello spazio in memoria, non ha senso farsi quelle "seghe mentali", perchè la memoria viene ottimizzata al meglio, gli oggetti non vengono sempre distrutti subito fuori dallo scope in cui sono utilizzate (anzi quasi mai); questo per dare la possibilità al flusso di riutilizzare tali oggetti, senza doverli ricreare, così da ottimizzare anche il tempo di creazione degli oggetti stessi.

- Michael -
http://blogs.dotnethell.it/Regulator/
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5