Запрос очень быстрый, но медленное отображение с dapper
Я использую dapper для нового проекта и люблю его, но я не понимаю, почему мои запросы очень медленные. Время выполнения очень быстрое, почти мгновенное, но соединение остается открытым намного дольше, в то время как dapper сопоставляет результат с моим объектом, который я предполагаю.
Вот пример:
![Glimpse result]()
Этот запрос - это просто SELECT для чего-то вроде 15 полей с первичным ключом, поэтому он очень быстро выполняется, и он не возвращает большую часть данных.
Мой код для его выполнения:
using (var conn = GetConnection())
{
obj = conn.Get<T>(id);
}
И объект является очень простой poco с Strings и Ints.
Итак, почему я трачу 220 мс на это, а сам выполнение запроса занимает 3 мс? Где разница?
Спасибо за вашу помощь!
Ответы
Ответ 1
У меня был аналогичный опыт с Dapper, поскольку я пытался создать проект из объекта View в POCO. Проблема заключалась в том, что для меня не было столбца для каждого свойства моего объекта, поэтому Convert.ChangeType() был очень медленным. Я добавил столбец в свой вид, который всегда возвращает NULL, а вызов Query() ускоряется.
Ответ 2
ОБНОВЛЕНИЕ
Было одно поле, которое вызывало проблемы для меня в части выбора моего оператора SQL. Я просто удалил каждое поле по одному, а затем нашел тот, который вызывал проблему.
Мне пришлось наложить одно из полей на nvarchar следующим образом:
CAST(my_field AS nvarchar(max)) as my_field
ОРИГИНАЛЬНЫЙ ОТВЕТ
Он должен что-то сделать с отображением. Потому что, если я изменю его с "Сильно типизированного" (который принимает навсегда, почти 1 минута):
var products = connection.Query<Product>(sql).ToList();
в "Анонимный":
var products = connection.Query(sql).ToList();
то он выполняется очень быстро (1 секунда).
Я попробовал и выполнил инструкцию SQL непосредственно в "SQL Server Management Studio" в качестве запроса, и он заканчивается менее чем за 1 секунду.
Итак, мое предложение, что вы используете "анонимное сопоставление", пока ребята-dapper не исправят это, если они смогут.