Using intrinsic memory management with C#
Consider the following code snippet
// Declare the reader.
SqlDataReader reader = null;
// Use the reader here.
try
{
// Create the reader.
reader = new SqlDataReader(...);
// Use the reader.
}
catch
{
}
finally
{
// Check the reader for null. If it is not, then
// dispose.
if (reader != null)
{
// Dispose of it.
((IDisposable) reader).Dispose();
}
}
Here, we are checking whether the reader is disposed or not. If not, we are disposing it explicitly. This is equivalent to being a good C# citizen and disposing off variables which are not required.
There is now a even better method of automatic memory management. The “using“ keyword.
Here is how it works.
SqlDataReader data;
using (data = command.ExecuteReader(CommandBehavior.CloseConnection))
{
while( data.Read() )
{
Console.WriteLine("Company Name " +
data.GetString(data.GetOrdinal("CompanyName"));
}
} // automatically calls data.Dispose();
Here is the link to the MSDN page describing this behavior (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csspec/html/vclrfcsharpspec_8_13.asp)
The beauty of this approach is that memory management becomes intrinsic. Hats off to the new keyword “using”.