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

Autore: Laura McKinney
Data Della Creazione: 2 Aprile 2021
Data Di Aggiornamento: 13 Maggio 2024
Anonim
Finalize vs Dispose | C# Interview Questions
Video: Finalize vs Dispose | C# Interview Questions

Contenuto


I metodi 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 class. La principale differenza 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. Studiamo alcune altre differenze tra loro con l'aiuto di una tabella comparativa mostrata di seguito.

  1. Tabella di comparazione
  2. Definizione
  3. Differenze chiave
  4. Conclusione

Tabella di comparazione

Base per il confrontodispose ()finalizzare ()
definitoIl metodo dispose () è definito nell'interfaccia IDisposable interface.L'ID metodo finalize () definito nella classe java.lang.object.
Sintassipublic void Dispose () {
// Disporre il codice qui
}
protetto void finalize () {
// codice di finalizzazione qui
}
Richiamato Il metodo dispose () viene invocato dall'utente.Il metodo finalize () viene richiamato dal Garbage Collector.
ScopoIl metodo dispose () viene utilizzato 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.
Identificatore di accessoIl metodo dispose () è dichiarato pubblico.Il metodo finalize () è dichiarato privato.
Azione Il metodo dispose () è più veloce e dispone immediatamente un oggetto.Il metodo finalizzato è più lento rispetto allo smaltimento
PrestazioneIl metodo disposes () esegue quindi l'azione istantanea, non influisce sulle prestazioni dei siti Web. Il metodo finalize () più lento influisce sulle prestazioni dei siti Web.


Definizione di dispose ()

Il metodo dispose () rilascia le risorse non gestite contenute in un oggetto della classe. Le risorse non gestite sono file, connessioni dati, ecc. Il metodo dispose () è dichiarato nell'interfaccia IDisposeable ed è 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 sintassi seguente:

public void dispose () {// Disponi il codice qui}

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


Questo metodo viene invocato manualmente dal codice di un programma in quanto è implementato per richiamare. Le prestazioni dei metodi sono veloci e liberano istantaneamente le risorse trattenute dall'oggetto di una classe.

Definizione di finalize ()

Il metodo finalize () è definito in oggetto classe. Viene utilizzato per le attività di pulizia. Questo metodo viene chiamato dal Garbage Collector quando il riferimento di un oggetto non viene utilizzato per molto tempo. Garbage Collector libera automaticamente le risorse gestite ma se si desidera 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 ():

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

Nella sintassi sopra, il metodo finalize () è dichiarato protetto. Il motivo alla base 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 delle prestazioni in quanto non libera la memoria all'istante. In C # il metodo finalize viene chiamato automaticamente con i distruttori.

  1. Il metodo dispose () è definito in un'interfaccia IDisposable. D'altra parte, il metodo finalize () è definito nella classe oggetto.
  2. Il metodo dispose () deve essere invocato manualmente all'interno del codice da un programmatore, mentre il metodo finalize viene automaticamente invocato 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 rileva che a quell'oggetto non è stato fatto riferimento per molto tempo.
  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 perché le risorse gestite vengono automaticamente liberate dal Garbage Collector.
  5. L'identificatore di accesso del metodo dispose () è pubblico in quanto è definito nell'interfaccia IDisposable e verrebbe implementato dalla classe che implementa questa interfaccia, quindi dovrebbe essere pubblico. D'altra parte, il metodo finalize () ha protetto l'identificatore di accesso in modo che non dovrebbe essere accessibile a nessun membro al di fuori della classe.
  6. Il metodo dispose () è veloce e libera immediatamente l'oggetto, quindi non influisce sul costo delle prestazioni. Il metodo finalize () è più lento e non libera istantaneamente le risorse trattenute dall'oggetto.

Conclusione:

Si consiglia di utilizzare il metodo dispose () sul metodo finalize () poiché è più veloce di finalize. Inoltre, potrebbe essere chiamato in qualsiasi momento, quando necessario.