Недавно мы начали использовать скомпилированные запросы, чтобы повысить производительность при настройке Linq to SQL. Существует несколько запросов, выполнение которых всегда занимает несколько секунд, а первый раз занимает менее секунды при последующих запусках. Похоже, это происходит потому, что компиляция фактически не происходит, пока вызов не будет выполнен в первый раз.
Есть ли простой способ заставить эту компиляцию произойти во время компиляции программы или, по крайней мере, во время запуска?
EDIT:
Так что из комментариев, которые я вижу, похоже, что запросы linq определенно не компилируются, пока не будет выполнен вызов. Прямо сейчас я пишу мои запросы, как это:
static readonly Func<DataContext, int, IQueryable<Item>> getByPLUComp =
CompiledQuery.Compile<DataContext, int, IQueryable<Item>>((db, PLU) =>
from i in db.Items
where i.IntPLU == PLU && i.Terminated == null
select i);
У меня есть куча этих статических только для чтения Funcs. Есть ли какой-нибудь простой способ запустить программу и инициализировать ее при запуске, так что затраты будут производиться там, а не при регулярном использовании?
РЕДАКТИРОВАТЬ 2:
Одна последняя попытка, прежде чем я оставлю этот вопрос. Чтобы решить эту проблему, я просто добавил вызовы к скомпилированным запросам во время инициализации моей программы. Например:
public void Initialize()
{
DataContext db = new DataContext();
getByPLUComp(db, 0);
}
Существует ли более элегантный способ принудительной компиляции, не выполняющий запрос и не выбрасывающий результаты?