Я работаю над инструментом для оптимизации запросов linq к sql. По сути, он перехватывает конвейер выполнения linq и выполняет некоторые оптимизации, такие как, например, удаление избыточного соединения из запроса. Конечно, во время выполнения накладные расходы перед выполнением запроса в DBMS, но затем, запрос должен быть обработан быстрее. Я не хочу использовать SQL Server Profiler, потому что я знаю, что сгенерированный запрос будет работать лучше в БД, чем оригинальный, я ищу правильный способ измерения глобального времени между созданием запроса в linq конец его исполнения. В настоящее время я использую класс Stopwatch, и мой код выглядит примерно так:
var sw = new Stopwatch();
sw.Start();
const int amount = 100;
for (var i = 0; i < amount; i++)
{
ExecuteNonOptimizedQuery();
}
sw.Stop();
Console.Writeline("Executing the query {2} times took: {0}ms. On average, each query took: {1}ms", sw.ElapsedMilliseconds, sw.ElapsedMilliseconds / amount, amount);
В основном метод ExecutenNonOptimizedQuery () создает новый DataContext, создает запрос и затем выполняет итерацию по результатам.
Я сделал это для обеих версий запроса, обычной и оптимизированной. Я взял идею из этого сообщения от Франса Бума.
Есть ли другой подход / соображения, которые я должен принять?
Заранее спасибо!