Получение Query vs Mapping Speed ​​из LinqToSql? - PullRequest
3 голосов
/ 23 ноября 2011

Есть ли способ профилировать LinqToSql, чтобы узнать, сколько времени занимает запрос в базе данных и сколько времени занимает сопоставление с объектами?

Я нахожусь в точке, где у меня молниеносный запрос, насколько я могу судить по SQL Profiler, но медленный вызов со стороны приложения, и мне интересно, является ли медленное отображение DataReader> Objects.

Ответы [ 2 ]

4 голосов
/ 23 ноября 2011

Добро пожаловать в наш мир!Да, мы тоже это видели.Что касается его измерения, мы написали MvcMiniProfiler таким образом, чтобы он мог обернуть стандартное соединение / команду / считыватель БД и т. Д. (Поскольку ADO.NET довольно дружествен к декораторам);поэтому мы можем измерить издержки LINQ с помощью:

using(MiniProfiler.Current.Step("Getting awesome data")) {
    var data = {your query that materializes data, i.e. ToList() etc }
}

, затем MvcMiniProfiler покажет вам время и т. д. «Получение потрясающих данных», а также время, потраченное на запросы SQL и т. д.

Мы обнаружили, что часто был очень большой разрыв, даже при использовании ExecuteQuery<T>(sql, args), который (наряду с некоторым тестированием активности процессора) позволил нам сильно подозревать, что материализация была виновником (в частности, при работе при высокой нагрузке; мы могли видеть,например, запрос 4 мс, занимающий 80 + мс из-за накладных расходов - таким образом, 76 мс потерялись для LINQ).Итак, мы написали dapper-dot-net, который делает потрясающую работу по сокращению затрат на материализацию.Запрос 4 мс снова занимает 4 мс.

Например:

enter image description here

столбцы (я включил только 2 строки, поэтому заголовки отсутствуют):

имя шага |время в этом шаге (мс) |смещение от начала (мс) |sql |время в sql (мс)

Как видите, для запуска sql потребовалось 1,3 мс, а для шага - 1,8 мс, поэтому накладные расходы составляют 0,5 мс.«1 sql» - это фактически гиперссылка на sql (с параметрами / значениями), которая была выполнена.И вы можете запустить его 24x7in производства без боли (.... мы делаем).

2 голосов
/ 23 ноября 2011

Да, используйте Linq2SqlProfiler http://l2sprof.com/.. Я использую это для проверки количества обращений и времени выполнения и т. Д.

проверьте подробности использования на сайте ..

если вы ищете профилировщик сервера sql, то в коде Google доступна загрузка с открытым исходным кодом.

проверить следующий стековый поток поток ссылка для другого ASP.NET MVC Mini Profiler

проверьте MVC Mini Profiler здесь: http://code.google.com/p/mvc-mini-profiler/

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