我的问题是关于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 对象的迭代之间的执行时间很长,那么这可能是一个问题,因为连接打开的时间会更长,等等。但是,这似乎也有可能减少 CPU 使用率在 SQL Server 上,因为它仅在使用 IEnumerable 对象时返回数据。它还降低了客户端的内存使用量,因为客户端在工作时只需加载一个 MyType 实例,而不是加载所有出现的 MyType(通过迭代整个 DataReader 并返回一个列表或其他内容)。
这不是我会遵循的模式。我不会像担心锁那样担心服务器上的负载。遵循这种模式将数据检索过程集成到您的业务逻辑流中,这似乎是一个万能的麻烦秘诀;你不知道迭代方面会发生什么,并且你正在将自己插入其中。一次性检索您的数据,然后在您关闭读取器后允许客户端代码对其进行枚举。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)