当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《是否增加了按名称而不是按索引查找DataTable中的列的开销?》经验,为你挑选了1个好方法。

在一个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的性能优势的情况?



1> stakx suppor..:

是的,应该有一个小的开销连接到按名称而不是索引查找列.我不担心它,除非你继续在循环中查找同一列,就像你的代码示例中一样.因为这会导致轻微的开销累积到可测量的开销,具体取决于表的行数.

访问某行的特定列值的最快方法使用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对象本身进行查找,则可以更改列的顺序,而无需更改其余代码.

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有