sql - 查询速度非常快,但使用dapper的映射速度却很慢

标签 sql dapper

我正在为一个新项目使用dapper并喜欢它,但是我不明白为什么我的查询真的很慢。执行时间非常快,几乎是即时的,但是当dapper将结果映射到我的对象时,连接保持打开的时间更长。

这是一瞥的例子:



该查询只是对15个字段(在主键上带有where)的SELECT,因此它执行起来非常快,并且不会返回那么多数据。
我执行它的代码是:

 using (var conn = GetConnection())
 {
    obj = conn.Get<T>(id);
 }


这个对象是一个非常基本的带有字符串和整数的poco。
那么,为什么查询执行本身需要3毫秒,却浪费了220毫秒呢?区别在哪里?

谢谢你的帮助 !

最佳答案

更新

在我的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 Server Management Studio”中执行SQL语句作为查询,它在不到1秒的时间内完成。

因此,我的建议是,您要使用“匿名映射”,直到精简的人能够解决这个问题为止。

关于sql - 查询速度非常快,但使用dapper的映射速度却很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25167477/

相关文章:

c# - MVC 6 异步操作

c# - bool类型返回规则

java - 使用 Hibernate HQL 从 Oracle DB 检索记录时出现性能问题

php - MYSQL查询每次都出错

sql - 带有包含条件的字符串的 if 语句

unit-testing - 如何使用 Moq.Dapper 模拟 QueryMultiple

c# - 使用 Dapper 将字符串映射到 guid

SQL 查询 GROUP BY 在通过 Google Chome 访问的 w3 学校网站上没有按预期工作,通过 Firefox 按预期工作

sql - 返回表的大小为 MB 而不是 KB

c# - 尝试使用 Dapper.SimpleCRUD 插入泛型时出错