Запрос, выполняемый из Nhibernate, выполняется медленно, а из ADO.NET - быстро

У меня есть запрос в приложении MVC, на выполнение которого уходит около 20 секунд (используется NHibernate 3.1). Когда я выполняю запрос вручную в Management studio, он занимает 0 секунд.

Я видел похожие вопросы на SO о проблемах, схожих с этой, поэтому я сделал свой тест на один шаг дальше.

Я перехватил запрос с помощью Sql Server Profiler и выполнил его с помощью ADO.NET в своем приложении.

Запрос, который я получил от Profiler, выглядит следующим образом: "exec sp_executesql N'select...."

Мой код ADO.NET:

SqlConnection conn = (SqlConnection) NHibernateManager.Current.Connection;

var query = @"<query from profiler...>";
var cmd = new SqlCommand(query, conn);

SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return RedirectToAction("Index");

Этот запрос также очень быстрый, его выполнение не занимает много времени.

Также, я увидел кое-что очень странное в Profiler. Запрос, при выполнении из NH, имеет следующую статистику:

reads: 281702 writes: 0

Тот, что из ADO.NET:

reads: 333 пишет: 0

У кого-нибудь есть какие-нибудь догадки? Есть ли какая-то информация, которую я могу предоставить, чтобы помочь диагностировать проблему?

Я думал, что это может быть связано с некоторыми настройками соединения, но версия ADO.NET использует то же самое соединение из NHibernate.

Заранее спасибо

UPDATE:

Я использую NHibernate LINQ. Запрос огромен, но является страничным, с выборкой всего 10 записей.

Параметры, которые передаются в "exec sp_executesql":

@p0 int,@p1 datetime,@p2 datetime,@p3 bit,@p4 int,@p5 int

@p0=10,@p1='2009-12-01 00:00:00',@p2='2009-12-31 23:59:59',@p3=0,@p4=1,@p5=0

12
задан psousa 13 October 2011 в 12:35
поделиться