【发布时间】:2009-09-09 14:39:30
【问题描述】:
我的问题是基于以下代码的SQL连接状态、负载等:
public IEnumberable<MyType> GetMyTypeObjects()
{
string cmdTxt = "select * from MyObjectTable";
using(SqlConnection conn = new SqlConnection(connString))
{
using(SqlCommand cmd = new SqlCommand(cmdTxt, conn))
{
conn.Open();
using(SqlDataReader reader = cmd.ExecuteReader())
{
while(reader.Read())
{
yield return Mapper.MapTo<MyType>(reader);
}
}
}
}
yield break;
}
如果有许多进程运行类似代码并且在 IEnumerable 对象的迭代之间执行时间很长,我可以看到这可能是一个问题,因为连接将打开更长的时间等。但是,这似乎也有可能减少SQL 服务器上的 CPU 使用率,因为它仅在使用 IEnumerable 对象时返回数据。它还降低了客户端的内存使用量,因为客户端只需要在工作时加载一个 MyType 实例,而不是加载所有出现的 MyType(通过遍历整个 DataReader 并返回一个 List 或其他东西)。
是否有任何您不希望以这种方式使用 IEnumerable 的实例,或者您认为它非常适合的任何实例?
这会给 SQL 服务器带来什么样的负载?
这是您会在自己的代码中使用的东西吗(除非提及 NHibernate、Subsonic 等)?
-
【问题讨论】:
标签: c# sql-server ienumerable