gpt4 book ai didi

c# - 对 SQL 数据使用 IEnumerable 返回类型有什么陷阱吗?

转载 作者:太空狗 更新时间:2023-10-29 22:25:03 24 4
gpt4 key购买 nike

我的问题是基于以下代码的 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 并返回一个列表或其他东西)。

  • 是否有任何您能想到的不希望以这种方式使用 IEnumerable 的情况,或者您认为它非常适合的任何情况?

  • 这会给 SQL 服务器带来什么样的负载?

  • 这是您会在自己的代码中使用的东西吗(除非提及 NHibernate、Subsonic 等)?

  • -

最佳答案

这不是我会遵循的模式。我不会像担心锁那样担心服务器上的负载。遵循这种模式会将数据检索过程集成到您的业务逻辑流中,这似乎是解决问题的万能药方;您不知道迭代端会发生什么,并且您将自己插入其中。一次检索您的数据,然后在您关闭阅读器后允许客户端代码枚举它。

关于c# - 对 SQL 数据使用 IEnumerable<T> 返回类型有什么陷阱吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1400146/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com