gpt4 book ai didi

c# - 按名称而不是按索引查找 DataTable 中的列是否会增加开销?

转载 作者:行者123 更新时间:2023-11-30 13:34:35 26 4
gpt4 key购买 nike

DataTable 对象中,按名称 thisRow("ColumnA") 而不是按列索引 thisRow 查找列值是否会增加开销(0)?在哪些情况下这可能是一个问题。

我所在的团队有很多编写 VB6 代码的经验,我注意到他们没有按名称为 DataTable 对象或数据网格进行列查找。即使在 .NET 代码中,我们也使用一组整数常量来引用这些类型的对象中的列名。我问我们的团队领导为什么会这样,他提到在 VB6 中,按列名而不是索引查找数据有很多开销。这对于 .NET 仍然适用吗?


示例代码(在 VB.NET 中,但同样适用于 C#):

Public Sub TestADOData()
Dim dt As New DataTable

'Set up the columns in the DataTable '
dt.Columns.Add(New DataColumn("ID", GetType(Integer)))
dt.Columns.Add(New DataColumn("Name", GetType(String)))
dt.Columns.Add(New DataColumn("Description", GetType(String)))

'Add some data to the data table '
dt.Rows.Add(1, "Fred", "Pitcher")
dt.Rows.Add(3, "Hank", "Center Field")

'Method 1: By Column Name '
For Each r As DataRow In dt.Rows
Console.WriteLine( _
"{0,-2} {1,-10} {2,-30}", r("ID"), r("Name"), r("Description"))
Next

Console.WriteLine()

'Method 2: By Column Name '
For Each r As DataRow In dt.Rows
Console.WriteLine("{0,-2} {1,-10} {2,-30}", r(0), r(1), r(2))
Next

End Sub

是否存在方法 2 比方法 1 提供性能优势的情况?

最佳答案

是的,按名称而不是按索引查找列应该会有轻微的开销。我不会担心,除非您一直在循​​环中查找同一列,就像在您的代码示例中一样。因为这样一来,轻微的开销可能会累积成可衡量的开销,具体取决于表的行数。

访问某行特定列值的最快方法使用DataColumn 对象本身进行查找。例如:

Dim dt As DataTable = ...

Dim idColumn As DataColumn = dt.Columns("ID")
Dim nameColumn As DataColumn = dt.Columns("Name")
Dim descriptionColumn As DataColumn = dt.Columns("Description")

For Each r As DataRow In dt.Rows

' NB: lookup through a DataColumn object, not through a name, nor an index: '
Dim id = r(idColumn)
Dim name = r(nameColumn)
Dim description = r(descriptionColumn)

...
Next

最后一条建议:我强烈建议您不要使用数字索引!它使您的代码更脆弱,也更难以理解和维护:一旦列的逻辑顺序发生变化,您就需要相应地调整您的代码,可能在几个地方(您可能很容易监督其中一个,导致错误)。如果您改为使用列名或 DataColumn 对象本身进行查找,则可以更改列的顺序而无需更改其余代码。

关于c# - 按名称而不是按索引查找 DataTable 中的列是否会增加开销?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2631951/

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