c# kodu:
Alıntı
using (StreamReader reader = new StreamReader(".txt"))
{
reader.ReadToEnd();
}
Üretilen CIL kodu:
Alıntı
.entrypoint
// Code size 41 (0x29)
.maxstack 2
.locals init ([0] class [mscorlib]System.IO.StreamReader reader,
[1] bool CS$4$0000)
IL_0000: nop
IL_0001: ldstr ".txt"
IL_0006: newobj instance void [mscorlib]System.IO.StreamReader::.ctor(string)
IL_000b: stloc.0
.try
{
IL_000c: nop
IL_000d: ldloc.0
IL_000e: callvirt instance string [mscorlib]System.IO.TextReader::ReadToEnd()
IL_0013: pop
IL_0014: nop
IL_0015: leave.s IL_0027
} // end .try
finally
{
IL_0017: ldloc.0
IL_0018: ldnull
IL_0019: ceq
IL_001b: stloc.1
IL_001c: ldloc.1
IL_001d: brtrue.s IL_0026
IL_001f: ldloc.0
IL_0020: callvirt instance void [mscorlib]System.IDisposable:

ispose()
IL_0025: nop
IL_0026: endfinally
} // end handler
IL_0027: nop
IL_0028: ret
C# kodu:
Alıntı
StreamReader reader = new StreamReader(".txt");
try
{
reader.ReadToEnd();
}
finally
{
reader.Dispose();
}
Üretilen CIL kodu:
Alıntı
.entrypoint
// Code size 35 (0x23)
.maxstack 2
.locals init ([0] class [mscorlib]System.IO.StreamReader reader)
IL_0000: nop
IL_0001: ldstr ".txt"
IL_0006: newobj instance void [mscorlib]System.IO.StreamReader::.ctor(string)
IL_000b: stloc.0
.try
{
IL_000c: nop
IL_000d: ldloc.0
IL_000e: callvirt instance string [mscorlib]System.IO.TextReader::ReadToEnd()
IL_0013: pop
IL_0014: nop
IL_0015: leave.s IL_0021
} // end .try
finally
{
IL_0017: nop
IL_0018: ldloc.0
IL_0019: callvirt instance void [mscorlib]System.IO.TextReader:

ispose()
IL_001e: nop
IL_001f: nop
IL_0020: endfinally
} // end handler
IL_0021: nop
IL_0022: ret
CIL kodlarından da anlaşılacağı gibi aslında try finally blok kullanımı ile using kullanımı arasında büyük farklar yoktur. sadece using direktifi kullanıldığında obje dispose edildiyse finally blogundan çıkılıyor. Bu da exception safety sağlayabilir. Tabiki her execute işlemine finally kullanmak amelasyon olacağı için (Her execute işleminin aynı method üzerinden yapılacağı bir methodu yazmadıysanız) using kullanmak mantıklı olacaktır.
Probleminize gelirsek:
Sorun server-side bir problem gibi duruyor. Kullandığınız Foreign Key'lerin çokluğu, veri bütünlüğünün bozulmuş olması, index tanımlaması yaptıysanız bu tanımın değişmiş olabileceği, tabloların relation durumlarının karışık olması, sunucunuz ile sql sunucunuz farklıysa aradaki bağlantı durumu vs vs gibi nedenlerden dolayı time-out alıyor olabilirsiniz. Bunların yanında SQL sunucunuzdan direk olarak sp execute yaparak çalışma zamanını kontrol ediniz. Sorun yok ise kodda optimizasyona gidebilirsiniz.