Не уповільнює чи LINQ швидкодію?

82

Програмування Asp.net
Попередній

Наступний

Вдома не було чим зайнятися і я захотів перевірити швидкість мапінгу LINQ, а точніше швидкість роботи з даними. Не довго шаманя над компом була створена програма, яка зчитує 5000 разів табличку з даними (таблиці даних було мало, близько 6 записів, чомусь обламало заповнювати більше), після цього лічені дані відправлялися на gridview. Отже, зчитуємо дані і кидаємо в грід, час виводимо на екран.

Мені в голову прийшло лише 5 способів вважати дані:

1) Використовує SqlDataReader код виглядає так:

List list = new List();

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 у швидкості програє.

Але трохи поміркувавши я зрозумів. По-перше було 5000 запитів менше ніж за хвилину – це прям DOS-атака якась. По-друге я згадав скільки довелося писати коду що б реалізувати більш швидкі методи, не знаю чи варто ті сили виграних мілісекунд на одному запиті.

Я розумію що не погано було б порівняти LINQ c такою штукою як nhibernate або Entity Framework, але поки я їм не користуюся і вивчати як-то немає бажання і потреби