В запросах EF SQL, которые намного быстрее, два «использующих» блока или один, или они примерно одинаковы по скорости? - PullRequest
0 голосов
/ 23 ноября 2011

Какой из двух приведенных ниже методов запроса, использующих Entity Framework 4.0 для генерации SQL-запроса, значительно быстрее ?Первый использует два блока «Using», а второй - только один.Оба метода требуют двух обращений к базе данных, но первый метод закрывает соединение дважды, а второй закрывает его один раз.Я предполагаю, что эти два метода примерно одинаковы по скорости и существенно не отличаются по скорости выполнения друг от друга - правда?Однако предположим, что к этим методам, которые являются методами веб-служб, обращаются очень интенсивно, примерно 2000 раз в секунду, так что помогает каждый маленький кусочек производительности.Должен ли я переписать код версии I как версию II?

Спасибо.

 //VERSION I:  TWO USING BLOCKS IN SERIES, THE OUTPUT OF THE FIRST AFFECTING THE SECOND

 List<Categories> CategoryList = new Categories();

 using (EntityFramework1 context = new EntityFramework1())
 {


 try 
 {
 var Cats = from C in context.Categories
      select C);

 CategoryList = Cats.ToList();

 }
 catch (Exception) {}
 }
 }
 } //end of first using block

 using (EntityFramework1 context = new EntityFramework1())
 {

 try 
 {

 Var CustomersFromZipCOde = context.Customers.Where (custo => custo.CustomerID==customerIDString && custo.ZipCode.StartsWith(ZipCodeString) &&      custo.Customer_Categories.Any(categ => CategoryList.Contains(categ.CategoryID)));

 //gives the right output, with CategoryList filled by the earlier query
 }
 catch (Exception) { }
 }
 } //end of second using block


 //VERSION II:  ONE USING BLOCK ONLY--is this significantly faster than Version II?

 List<Categories> CategoryList = new Categories();

 try 
 {

 using (EntityFramework1 context = new EntityFramework1())
 {



 var Cats = from C in context.Categories
      select C);

 CategoryList = Cats.ToList();


 Var CustomersFromZipCOde = context.Customers.Where (custo => custo.CustomerID==customerIDString && custo.ZipCode.StartsWith(ZipCodeString) &&      custo.Customer_Categories.Any(categ => CategoryList.Contains(categ.CategoryID)));

 //gives the right output, with CategoryList filled by the earlier query
 }
 }
 catch (Exception) { }
...