【问题标题】:Dapper Query(..): stream or loads all?Dapper Query(..):流式传输还是全部加载?
【发布时间】:2016-05-30 12:35:31
【问题描述】:

它是加载这段代码中的所有记录还是使用 SqlDataReader 之类的东西?

using (var c = new SqlConnection(_options.TargetConnectionString))
{
    c.Open();
    foreach(var record in c.Query("select * from Users")) // suppose N+1 records
    {
        // all records loaded or read one by one here? 
        // some work here...
    }
}

【问题讨论】:

  • 考虑使用 SQL Server Profiler 对此进行调查。但似乎所有记录都加载到您的案例中。

标签: c# orm dapper


【解决方案1】:

这两个选项都受支持。默认情况下,数据被缓冲到List<T>,因为大多数查询都相当小,并且避免了“多个记录集”的限制。要在不进行额外分配的情况下获取基础列表,请使用提供的 .AsList() 扩展方法。但是,如果您想要无缓冲数据:传递 buffered: false。这将为您提供一个包含原始 IDataReader 的枚举器 - 适用于大型查询。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-11
  • 1970-01-01
  • 2014-05-27
  • 2021-12-25
相关资源
最近更新 更多