Domanda

Se uso qualcosa come:

using (OdbcConnection conn = new OdbcConnection(....))
{
  conn.open();
  my commands and sql, etc.
}

Devo fare un conn.Close (); o se l'istruzione using mi impediscono di farlo ultima chiamata? Ha smaltire tutto nel blocco utilizzando? Per esempio, se ho chiamato altri oggetti unlrelated sarebbe dipose di quelli automaticamente anche?

Grazie. Ero poco chiaro dopo aver letto su come utilizzare sul sito di Microsoft. Voglio fare in modo che non ho alcun perdite di memoria.

È stato utile?

Soluzione

  1. Il blocco utilizzando disporrà del OdbcConnection.
  2. regole di visibilità lavoro normale per qualsiasi cosa dichiarata all'interno del blocco utilizzando.
  3. Il blocco utilizzando non pulire qualsiasi altro oggetto IDisposable. Pulisce solo fino alla voce dichiarata
    • Si noti che è possibile nido utilizzando blocchi, o se gli elementi sono dello stesso tipo, più elementi possono essere inizializzati allo stesso tempo.

Vedere la punta superiore della mia altra risposta per Come si usa la parola chiave using in C # per un po 'più di informazioni.

Vorrei anche ricordare che si può chiudere (smaltire) della connessione, non appena si è fatto con esso per rilasciare la risorsa. Le linee guida dicono che il chiamante deve essere in grado di chiamare ripetutamente il metodo Dispose. Il blocco utilizzando è essenzialmente una rete di sicurezza e permette di scrivere codice più chiaro nella maggior parte dei casi.


[Modifica] per esempio. inizializzazione multipla in un utilizzando: inizializzare più di un oggetto nello stesso utilizzando senza dover nido con blocchi se gli oggetti sono dello stesso tipo:

using (Bitmap b1 = new Bitmap("file1"), b2 = new Bitmap("file2")) 
{ ... }

Joel Coehoorn menzionato stacking, che è la nidificazione ma omettendo le parentesi graffe, per quanto è possibile omettere le parentesi graffe in un for o if dichiarazione. L'interfaccia utente non riformatta con un rientro. Sarei curioso di ciò che l'IL assomiglia.

using(Bitmap b = new Bitmap("filex"))
using(Graphics g = Graphics.FromImage(b))
{ 
}

È un errore usare mettere oggetti diversi nello stesso usando error CS1044: Cannot use more than one type in a for, using, fixed, or declaration statement.

// error CS1044
using(Bitmap b = new Bitmap("filex"), Graphics g = Graphics.FromImage(b)) 

Altri suggerimenti

L'istruzione using gestirà chiamando il Primo e Dispose metodi per voi.

Scott Hanselman ha una buona spiegazione della istruzione using.

L'istruzione using assicura che un oggetto che implementa IDisposable viene smaltito. Sarà smaltire solo l'oggetto che viene referened nel blocco utilizzando in modo che il codice è fondamentalmente equivlant a:

OdbcConnection conn = new ....;
try
{
   conn.open();
   conn.....
}
finally
{
   conn.dispose();
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top