我使用相同的参数和存储的proc来运行以下两个查询。示例A耗时一分钟,而示例B耗时不到20秒。如果我使用EF调用相同的proc,那么我大约需要10秒钟(返回的记录刚超过50000)。因此,对于为什么EF更快也感到困惑。
范例A:
List<resultObj> result;
using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["string"].ConnectionString))
{
result = conn.Query<resultObj>("spProc", param: new { /*params here*/ },
commandType: CommandType.StoredProcedure, commandTimeout: 300).ToList();
}
范例B:
using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["string"].ConnectionString))
{
var result = conn.Query<resultObj>("spProc", param: new { /*params here*/ },
commandType: CommandType.StoredProcedure, commandTimeout: 300).ToList();
}
为什么将结果变量移出使用范围之外会导致性能大幅提高?
没有理由是这种情况。在这种情况下,我怀疑是否有任何差异是由于数据库服务器瓶颈所致-也许您是在第一次有效地将数据预填充到内存中(速度较慢,必须将其击中磁盘)-或服务器争用或网络吞吐量问题。您在两个示例中描述的内容只能由基础数据源引起,而不是变量声明位置之间的差异。
略为注意:AsList()
优于ToList()
,但这也将:只会为您节省一小段时间(可能不到一毫秒)。
分析时,您应该:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句