Raccomandato, 2024

Scelta Del Redattore

Differenza tra dispose () e finalize () in C #

Methods dispose () e finalize () sono i metodi di C # che vengono invocati per liberare le risorse non gestite detenute da un oggetto. Il metodo dispose () è definito all'interno dell'interfaccia IDisposable mentre, il metodo finalize () è definito all'interno dell'oggetto classe. La differenza principale tra dispose () e finalize () è che il metodo dispose () deve essere esplicitamente invocato dall'utente, mentre il metodo finalize () viene invocato dal garbage collector, appena prima che l'oggetto venga distrutto. Cerchiamo di studiare alcune altre differenze tra di loro con l'aiuto di un grafico di confronto mostrato di seguito.

Grafico comparativo

Base per il confrontosmaltire ()finalizza ()
definitoIl metodo dispose () è definito nell'interfaccia IDisposable dell'interfaccia.Il metodo finalize () id definito nella classe java.lang.object.
Sintassipublic void Dispose () {
// Scarica il codice qui
}
protected void finalize () {
// codice di finalizzazione qui
}
invocatoIl metodo dispose () è invocato dall'utente.Il metodo finalize () è invocato dal garbage collector.
ScopoMethod dispose () è usato per liberare risorse non gestite ogni volta che viene invocato.Il metodo finalize () viene utilizzato per liberare risorse non gestite prima che l'oggetto venga distrutto.
ImplementazioneIl metodo dispose () deve essere implementato ogni volta che esiste un metodo close ().Il metodo finalize () deve essere implementato per risorse non gestite.
Specificatore di accessoIl metodo dispose () è dichiarato pubblico.Il metodo finalize () è dichiarato come privato.
AzioneIl metodo dispose () è più veloce e dispone immediatamente di un oggetto.Il metodo finalizzato è più lento rispetto a dispose
PrestazioneIl metodo disposes () esegue l'azione istantanea quindi, non influisce sulle prestazioni dei siti Web.Il metodo finalize () essendo più lento influenza le prestazioni dei siti web.

Definizione di dispose ()

Il metodo dispose () rilascia le risorse non gestite detenute da un oggetto della classe. Le risorse non gestite sono file, connessioni dati, ecc. Il metodo dispose () è dichiarato nell'interfaccia IDisposeable e viene implementato dalla classe implementando l'interfaccia IDisposable. Questo metodo non viene chiamato automaticamente. Il programmatore deve implementarlo manualmente quando si crea una classe personalizzata che verrà utilizzata da altri. Il metodo ha la seguente sintassi:

 public void dispose () {// Dispose code here} 

Nella sintassi precedente, è possibile osservare che il metodo è dichiarato pubblico. È perché questo metodo è definito nell'interfaccia IDisposable e deve essere implementato dalla classe che implementa questa interfaccia. Quindi, per fornire accessibilità alla classe di implementazione, il metodo è dichiarato pubblico.

Questo metodo viene richiamato manualmente dal codice di un programma mentre viene implementato per richiamarlo. Le prestazioni dei metodi sono veloci e liberano istantaneamente le risorse contenute nell'oggetto di una classe.

Definizione di finalize ()

Il metodo finalize () è definito nella classe dell'oggetto . È usato per le attività di pulizia. Questo metodo viene chiamato dal garbage collector quando il riferimento di un oggetto non viene utilizzato per un lungo periodo. Garbage Collector libera automaticamente le risorse gestite, ma se vuoi liberare le risorse non gestite come handle di file, connessione dati, ecc., Il metodo finalize deve essere implementato manualmente. Il garbage collector richiama il metodo finalize () appena prima di distruggere completamente l'oggetto.

La sintassi del metodo finalize ():

 protected void finalize () {// codice di finalizzazione qui} 

Nella sintassi sopra, il metodo finalize () è dichiarato come protetto. La ragione di ciò è che il metodo finalize () non deve essere accessibile dall'esterno della classe e deve essere accessibile solo al garbage collector.

Il metodo finalize () influenza il costo della prestazione poiché non libera la memoria all'istante. In C # il metodo finalize viene chiamato automaticamente con i distruttori.

Differenze chiave tra dispose () e finalize ()

  1. Il metodo dispose () è definito in un'interfaccia IDisposable . D'altra parte, il metodo finalize () è definito nell'oggetto classe.
  2. Il metodo dispose () deve essere richiamato manualmente all'interno del codice da un programmatore, mentre il metodo finalize viene automaticamente richiamato dal garbage collector prima che distrugga l'oggetto.
  3. Il metodo dispose può essere invocato in qualsiasi momento, mentre il metodo finalize viene invocato dal garbage collector quando scopre che quell'oggetto non è stato referenziato per un lungo periodo.
  4. Il metodo dispose () è implementato in una classe dopo aver implementato l'interfaccia IDisposable. Il metodo finalize () deve essere implementato solo per risorse non gestite poiché le risorse gestite vengono automaticamente liberate dal garbage collector.
  5. Lo specificatore di accesso del metodo dispose () è pubblico in quanto è definito nell'interfaccia IDisposable e sarebbe implementato dalla classe che implementa questa interfaccia quindi, dovrebbe essere pubblico. D'altra parte, il metodo finalize () ha uno specificatore di accesso protetto in modo tale che non dovrebbe essere accessibile a nessun membro al di fuori della classe.
  6. Il metodo dispose () è veloce e libera l'oggetto immediatamente, quindi non influisce sul costo delle prestazioni. Il metodo finalize () è più lento e non libera le risorse detenute dall'oggetto all'istante.

Conclusione:

Si suggerisce di usare method dispose () sul metodo finalize () poiché è più veloce della finalizzazione. Inoltre, potrebbe essere chiamato in qualsiasi momento, quando necessario.

Top