【发布时间】:2018-03-07 08:42:45
【问题描述】:
var list = new List<object[]>();
var fieldCount = reader.FieldCount;
while(reader.Read()) {
var array = new object[fieldCount];
reader.GetValues(array);
list.Add(array);
}
给定上面的简单代码sn-p。并假设要检索的值是值类型的混合。
如果您之前知道每列的类型,是否有任何速度优势 手,并且可以正确调用那里的类型化方法来获取(全部)他们的 价值观?
或者获取键入的值会减慢整个读取过程?
将数据保留在对象数组中与将它们存储在类型化实体中时有哪些权衡?
【问题讨论】:
-
假设您的数据库中有一个表,其中包含客户数据,并且您希望从该表中检索一些记录并对这些数据进行一些处理。为了访问客户对象的属性,您必须拥有一个客户对象列表。对象列表不适合。
-
在大多数数据库访问中,最大的成本是延迟和通过网络传输数据。因此,在 C# 方面,您的主要关注点应该是易于理解代码。在任何地方使用
object会使代码更难推理。 github.com/StackExchange/Dapper 可能值得考虑。 -
@TimSchmelter 是的。这是微优化。我在这里有点过分杀戮。但这是一种强烈的好奇心。
-
No.2 主要通过连接池解决,许多框架甚至将它们的查询批处理在一起以最小化这种情况。甚至可以跟踪连接状态以查看未完成的查询在最终关闭之前是否仍然处于活动状态。
-
No.1 除非同时进行大量查询,否则今天不太可能成为问题之一。当然,这取决于所使用的数据库。同步查询(非常常见)最终可能会为该实例保留连接。您完成查询的时间越长,其他排队的查询等待的时间就越长。很简单。
标签: c# sqldatareader datareader