Во время рефакторинга кода я наткнулся на некоторые составные операторы (я говорю о 10-15).
using(X x=new X())
using(Y y=new Y())
using(Z z=new Z())
using(...)
{
List<X> listX= x.GetParameterListByID(pID);
List<Y> listY=y.GetParameterListByID(pID);
...
...
//other (business) calls/code, like 20-30 lines, that don't need the using instances
}
Пример класса будет что-то вроде
public class X : IDisposable{
public List<XParameterInfo> GetParameterListByID(int? pID){
const string query="SELECT name,value FROM parameters WHERE id=@ID";
//query code here
return queryResult;
}
}
И первое, о чем я подумал, было, зная, что using
- это, в основном, try{} finally{ x.Dispose(); }
, что используемые соединения будут оставаться открытыми / активными до тех пор, пока код в блоке использования не будет завершен, пока он необходим только для заполнить один список.
Это то, что я предполагаю, поправьте меня, если я ошибаюсь.
Учитывая то, что я сказал, правильно, было бы лучше (производительность, но в основном хорошая практика) написать что-то вроде
List<X> listX;
List<Y> listY;
List<Z> listZ;
...
//for the example here I wrote out 3 but let's talk 10 or more
using(X x=new X())
{
listX=x.GetParameterListByID(pID);
}
using(Y y=new Y())
{
listY=y.GetParameterListByID(pID);
}
using(Z z=new Z())
{
listZ=z.GetParameterListByID(pID);
}
...
// other calls but now outside the using statements
или это ничтожно мало, кроме того факта, что сложенные using
операторы убирают внешний вид вложенного кода?