Нужен совет по сравнению производительности 2 эквивалентных запросов linq к sql - PullRequest
1 голос
/ 15 марта 2010

Я работаю над инструментом для оптимизации запросов 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, создает запрос и затем выполняет итерацию по результатам.

Я сделал это для обеих версий запроса, обычной и оптимизированной. Я взял идею из этого сообщения от Франса Бума.

Есть ли другой подход / соображения, которые я должен принять?

Заранее спасибо!

1 Ответ

1 голос
/ 15 марта 2010

Вы можете запустить под профилировщиком. Но инструментальная сборка будет влиять на производительность кода, возможно искажая результат (с большой долей общего времени выполнения в SQL Server, это очень вероятно). Профилировщик выборки может помочь. (Профилировщик Visual Studio Team System может выполнять оба действия.)

Для изолированного теста для сравнения с подходами, использующими Stopwatch, обычно предпочтительным является подход. Вы можете удалить показ времени в SQL Profiler из времени секундомера, чтобы получить время в коде клиента (включая вашу постобработку).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...