У меня есть запрос в моем приложении MVC, для завершения которого требуется около 20 секунд (с использованием NHibernate 3.1). Когда я запускаю запрос вручную в студии управления, он занимает 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, имеет следующую статистику:
читает: 281702 пишет: 0
Один из ADO.NET:
читает: 333 пишет: 0
У кого-нибудь есть ключ? Есть ли информация, которую я могу предоставить, чтобы помочь диагностировать проблему?
Я думал, что это может быть связано с некоторыми настройками соединения, но версия ADO.NET использует то же соединение из NHibernate.
Заранее спасибо
UPDATE:
Я использую NHibernate LINQ. Запрос огромен, но представляет собой поисковый запрос, в котором извлекается всего 10 записей.
Параметры, которые передаются "exec sp_executesql", следующие:
@p0 int, @p1 datetime, @p2 datetime, @p3 бит, @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