我有一个使用 SqlDataReader 读取数据的方法,yield 返回一个 IEnumerable,例如:
IEnumerable<string> LoadCustomers()
{
using(SqlDataReader rdr = cmd.ExecuteReader())
{
while (rdr.Read())
{
yield return rdr.GetString(0);
}
}
}
现在假设我只需要最新的 10 个客户。我可以
LoadCustomers.Take(10)
或将 10 作为参数传递给 sql 并制作我的 sql
SELECT TOP 10 FROM Customers ORDER BY CreationDate DESC
根据这篇文章,即使数据读取器只读取几行(只要连接打开),整个结果集也会从 sql server 传输到客户端 - 我是否应该避免这种Take(10)
方法,因为无论如何都会将额外的数据传输到客户端或者避免它会是一个过早的优化(因为在读取 10 行之后,yield 返回代码会关闭连接,然后数据传输无论如何都会停止)?