Ниже приведен фрагмент упрощенной версии проблемы, с которой я столкнулся с Entity Framework v4, где первая загрузка занимает около 30 секунд на столе с 36 строками!Entity Framework slow with optional where clauses
После этого очень быстро загружается до тех пор, пока вы не измените параметры поиска, и это займет 30 секунд, но как только эта комбинация параметров поиска будет выполнена, как только она будет быстрой.
Это повторяется каждый раз, когда используется другая комбинация параметров.
IQueryable<User> result= GetAllUsers();
if (!String.IsNullOrWhiteSpace(firstNameSearchParam))
{
result = result.Where(u => u.firstname.contains(firstNameSearchParam))
}
if (!String.IsNullOrWhiteSpace(lastNameSearchParam))
{
result = result.Where(u => u.lastname.contains(lastNameSearchParam))
}
Var ret = result.ToArray();
Любые идеи были бы очень оценены.
Я не уверен, поможет ли pre-compiling the views. Я попытался, но не смог заставить его работать.
Где потрачено время? Профилируйте приложение или приостановите отладчик. – usr
Да, это время в ToArray(), когда запрос выполняется в sql, но запрос в sql занимает долю секунды. Я подозреваю, что, поскольку в первый раз EF строит взгляды или что-то еще, то это происходит во второй раз. Я не уверен, возможно ли получить EF для каждого вида сборки для динамически генерируемых запросов, подобных этому. –
Время не потрачено в ToArray напрямую (не может быть потому, что ToArray ничего не знает о SQL). Стек вызовов идет глубже. Включите «Показать внешний код» и посмотрите на фактический стек. – usr