我正在为一个新项目使用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/