Не замедляет ли LINQ быстродействие?

Programming
Предыдущий Следующий

Дома не было чем заняться и я захотел проверить скорость маппинга LINQ, а точнее скорость работы с данными. Не долго шаманя над компом была создана программа, которая считывает 5000 раз табличку с данными (в таблице данных было мало, около 6 записей, почему-то обломало заполнять больше), после этого считанные данные отправлялись на gridview. Итак, считываем данные и бросаем в грид, время выводим на экран.

Мне в голову пришло только 5 способов считать данные:

1) Использует SqlDataReader код выглядит так:

List<Employee> list = new List<Employee>();

using (SqlConnection con = new SqlConnection(ConnectionString))
{
  con.Open();

  using (SqlCommand cmd = new SqlCommand("Employee_SelectAll", con))
  {
    cmd.CommandType = CommandType.StoredProcedure;
    using (SqlDataReader rd = cmd.ExecuteReader())
    {
      while (rd.Read())
      {
        Employee item = new Employee();
        item.id = Convert.ToInt32(rd["id"]);
        item.FirsName = Convert.ToString(rd["FirstName"]);
        item.LastName = Convert.ToString(rd["LastName"]);

        list.Add(item);
      }
    }
  }
}

Я использую хранимую процедуру. После получения данных в list он отправляется в грид

2) Следующий метод использует SqlDataAdapter и DataSet, вот код:

using (SqlConnection con = new SqlConnection(ConnectionString))
{
  con.Open();

  using (SqlDataAdapter da = new SqlDataAdapter("Employee_SelectAll", con))
  {
    da.SelectCommand.CommandType = CommandType.StoredProcedure;

    DataSet ds = new DataSet();

    da.Fill(ds);
  }
}

3) Для разнообразия я еще попробовал считать данные использую BLToolkit - это еще один прикол для маппинга (не рекомендую его использовать, слишком много кода нужно писать)

4) Заодно и вспомнил предшественника LINQ - это файл DataSet.xsd (в нем метод маппинга так же прост, просто перетягиваешь таблички с одного окна в другое :-)

5) Последним разуметься был LINQ

 Вот какие у меня получились результаты:

linq

Как видно Linq  в скорости проигрывает.

Но немного поразмыслив я понял. Во-первых было 5000 запросов меньше чем за минуту - это прям DOS-атака какая-то. Во-вторых я вспомнил сколько пришлось писать кода что бы реализовать более быстрые методы, не знаю стоит те силы выигранных миллисекунд на одном запросе.

Я понимаю что не плохо было бы сравнить LINQ c такой штукой как nhibernate или Entity Framework, но пока я им не пользуюсь и изучать как-то нет желания и потребности

  • В 10/16/2013 12:23:01 AM, Аноним

    Тоже хотел самое сделать, а вы уже сделали. Спасибо.

Самостоятельный отпуск Опыт заказа вывоза мусора в Киеве Магія зміни: Від ночі до дня
Магія Вечірнього Неба: Відлякуйте втомленість дня і зануртеся у світ загадок і краси