Добро пожаловать в наш мир!Да, мы тоже это видели.Что касается его измерения, мы написали 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 мс.
Например:
столбцы (я включил только 2 строки, поэтому заголовки отсутствуют):
имя шага |время в этом шаге (мс) |смещение от начала (мс) |sql |время в sql (мс)
Как видите, для запуска sql потребовалось 1,3 мс, а для шага - 1,8 мс, поэтому накладные расходы составляют 0,5 мс.«1 sql» - это фактически гиперссылка на sql (с параметрами / значениями), которая была выполнена.И вы можете запустить его 24x7in производства без боли (.... мы делаем).