static void Main(string[] args)
{
using (SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=mzwucom;Integrated Security=SSPI;"))
{
conn.Open();
conn.Close();
}
Console.ReadKey();
}用Ildasm.exe查看MSIL代码:
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
// 代码大小 54 (0x36)
.maxstack 2
.locals init ([0] class [System.Data]System.Data.SqlClient.SqlConnection conn,
[1] bool CS$4$0000)
IL_0000: nop
IL_0001: ldstr "Data Source=.;Initial Catalog=mzwucom;Integrated S"
+ "ecurity=SSPI;"
IL_0006: newobj instance void [System.Data]System.Data.SqlClient.SqlConnection::.ctor(string)
IL_000b: stloc.0
.try
{
IL_000c: nop
IL_000d: ldloc.0
IL_000e: callvirt instance void [System.Data]System.Data.Common.DbConnection::Open()
IL_0013: nop
IL_0014: ldloc.0
IL_0015: callvirt instance void [System.Data]System.Data.Common.DbConnection::Close()
IL_001a: nop
IL_001b: nop
IL_001c: leave.s IL_002e
} // end .try
finally
{
[color=Red]IL_001e: ldloc.0
IL_001f: ldnull
IL_0020: ceq
IL_0022: stloc.1
IL_0023: ldloc.1
IL_0024: brtrue.s IL_002d
IL_0026: ldloc.0
IL_0027: callvirt instance void [mscorlib]System.IDisposable::Dispose()[/color]
IL_002c: nop
IL_002d: endfinally
} // end handler
IL_002e: nop
IL_002f: call valuetype [mscorlib]System.ConsoleKeyInfo [mscorlib]System.Console::ReadKey()
IL_0034: pop
IL_0035: ret
} // end of method Program::Main如红色部分代码所示,在finally块中,先将SqlConnection的实例conn和null比较,若相等则退出finally块,否则再调用Dispose方法来释放资源,所以,使用using语句我们就不需要手动去释放资源了,即使是出错的情况下,using也能保证资源被释放!
评论(0)
暂无评论。