How do I treat the SQLiteCommand
object,
do I have to call Dispose()
after ExecuteScalar
, ExecuteNonQuery
and ExecuteReader
or not?
The documentation example on SQLiteCommand doesn't dispose it whilst in the SQLiteTransaction the example disposes the SQLiteCommand object.
I always close the data reader object though. My application accesses the db from many threads.
Mostly I am interested in not leaking connections or disturbing SQLite. I am aware of using
and IDisposable
usage
Just do this:
Not calling dispose on the command won't do anything too bad. However calling Dispose on it will supress the call to the finalizer, making calling dispose a performance enhancement.
The using statement will call Dispose on an object even if an exception occurs that bypasses the code that calls Close(). This way you don't have to write a try/finally block just to close the readers or the connection. You also avoid this 1-in-100 case where you forget to write the proper finally block.
Such 1-in-100 cases have a tendency to occur much more frequently than one would think
If it is disposable, dispose it if you will not use it again. The best would be, to use using
So it will be disposed automatically when leaving the using scope.
It's best-practise to dispose everything that implements
IDisposable
as soon as you're finished with it because it might use unmanaged resources.This should be done with the
using
-statement since it wraps the code that uses this object and because it disposes it also in case of an exception.