Таймаут при использовании Linq-to-SQL
Я получаю ошибку на одной из страниц, связанная с тем, что запрос LINQ выходит за пределы времени ожидания, так как выполняется слишком долго. Это делает страницу unusable.
Это страница отчетов, к которой обращаются только администраторы около одного раза в день. Сократить этот запрос полностью невозможно, так как ему необходимо обработать большое количество данных.
Я читал, что для решения этой проблемы можно увеличить свойство таймаута в контексте данных, но я бы предпочел избежать этого, так как это изменит настройку для всего сайта.
Существует ли способ установить больший таймаут только для отдельных страниц?
5 ответ(ов)
Перед увеличением времени ожидания SQL всегда стоит оценить вашу стратегию индексирования. В моем опыте редко случается, чтобы запрос к хорошо индексированной таблице и столбцу приводил к тайм-ауту.
Вот ответ на вопрос, как можно увеличить тайм-аут запроса на отдельной основе:
using (MainContext db = new MainContext())
{
db.CommandTimeout = 3 * 60; // 3 минуты
}
Таким образом, вы можете увеличить время ожидания для запроса, не изменяя строки подключения или контексты данных. Это особенно полезно, если вам нужно изменить тайм-аут только для конкретного запроса.
Ответ @Tom Gullens не сработал для меня в EF6
.
Мне пришлось углубиться в базу данных через DbContext
:
Ecom.Database.CommandTimeout = 120;
Надеюсь, это сэкономит вам время.
Вот актуальный синтаксис для .Net 4.5:
MyDbContext context = new MyDbContext();
context.Database.SetCommandTimeout(300);
Этот код устанавливает таймаут (время ожидания) для выполнения команд базы данных в контексте MyDbContext
на 300 секунд. Убедитесь, что таймаут установлен до выполнения каких-либо запросов к базе данных.
Ответ Тома Гуллена действительно хороший.
Другой участник упомянул настройку параметра Connect Timeout в строке подключения.
Я хотел бы предостеречь, что параметр таймаута подключения в строке подключения НЕ является таймаутом команды. Это становится более очевидным, когда над этим поразмышлять. Это распространенная ошибка.
Если папка не существует, создайте её
Запрос прерван: Не удалось создать безопасный канал SSL/TLS
Как запустить модульные тесты на платформе x64?
В чем разница между двумя подходами маршрутизации на основе атрибутов: HttpGet("") и Route("")?
Использование номера версии веб-приложения из сборки (ASP.NET/C#)