Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >按名称而不是按索引查找DataTable中的列是否增加了开销?

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

Stack Overflow用户
提问于 2010-04-13 10:04:09
回答 5查看 2K关注 0票数 3

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

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

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

代码语言:javascript
运行
AI代码解释
复制
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提供性能优势的情况?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-04-13 10:10:06

,应该有一个连接到按名称而不是按索引查找列的轻微开销。我不会担心这个问题,除非您一直在循环中查找同一列,就像在代码示例中一样。因为根据表的行数,轻微的开销可能会累积到可测量的开销。

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

代码语言:javascript
运行
AI代码解释
复制
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对象本身进行查找,则可以更改列的顺序,而不必更改其余代码。

票数 7
EN

Stack Overflow用户

发布于 2010-04-13 10:30:11

事实是

如果名称查找区分大小写,则

  1. 按索引获取列为ArrayList
  2. 的直接索引,如果名称查找不区分大小写,则执行
  3. ,然后扫描列表以查找名称,并执行更昂贵的区域设置敏感字符串比较。

因此,按索引进行检索肯定是最有效的,但这有关系吗?

在我的机器上做一些基本的(读幼稚的)测试,我发现使用上述索引机制访问一列的1,000,000次需要花费以下时间

109.11ms

  • Case

  • 直接索引-13.3ms

  • 大小写不敏感查找-敏感查找- 109.24ms

因此,根据您的情况,您可以得出您的结论。

票数 2
EN

Stack Overflow用户

发布于 2010-04-13 10:10:20

是的,按名称(而不是绝对索引)查找列会带来开销(因为它只是定位列,然后以这种方式访问它)。

尽管如此,这是相当不成熟的优化。DataTable将首先尝试以区分大小写的方式定位列,这是非常快速的。如果它不能这样定位列,它就会以一种不区分大小写的方式出现,这只会稍微慢一些。

访问数据的绝对最快的方式是通过DataColumn对象本身,因为这是基于索引和基于名称的访问器所使用的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2631951

复制
相关文章
在 Linux 中如何按名称和 Grep 内容查找文件?
如果您使用该find命令递归搜索某些文件,然后将结果通过管道传递给该grep命令,那么您实际上将解析文件路径/名称,而不是它们的内容。
网络技术联盟站
2022/05/11
6.7K0
在 Linux 中如何按名称和 Grep 内容查找文件?
Excel按列排序和按行排序
文章背景:Excel二维表中记录着多行多列的数据,有时需要按行或按列排序,使数据更加清晰、易读。下面分别对按列排序和按行排序进行介绍。
Exploring
2022/08/10
3.2K0
Excel按列排序和按行排序
pandas按行按列遍历Dataframe的几种方式
iterrows(): 按行遍历,将DataFrame的每一行迭代为(index, Series)对,可以通过row[name]对元素进行访问。 itertuples(): 按行遍历,将DataFrame的每一行迭代为元祖,可以通过row[name]对元素进行访问,比iterrows()效率高。 iteritems():按列遍历,将DataFrame的每一列迭代为(列名, Series)对,可以通过row[index]对元素进行访问。 示例数据
kirin
2021/04/30
7.2K0
shell按列合并文件
cat命令可以按行依次合并两个文件。但有时候我们需要按列合并多个文件,也就是将每一个文件的内容作为单独的的几列,这个时候可以用paste来按列合并多个文件。 用法: paste file1 file2 ...
生信编程日常
2020/06/28
2.9K0
Python-Excel-openpyxl-10-按行或者按列遍历
系统:Windows 7 语言版本:Anaconda3-4.3.0.1-Windows-x86_64 编辑器:pycharm-community-2016.3.2 openpyxl:2.6.2
zishendianxia
2019/10/23
9.7K0
使用 Python 按行和按列对矩阵进行排序
假设我们采用了一个输入的 MxM 矩阵。我们现在将使用嵌套的 for 循环对给定的输入矩阵进行逐行和按列排序。
很酷的站长
2023/02/22
6.2K0
使用 Python 按行和按列对矩阵进行排序
BI技巧丨按列排序
PowerBI本身内置的排序方式,是遵循ASCII国际标准的方式,这就导致了中文的默认排序对于很多小伙伴来说并不友好。
PowerBI丨白茶
2022/11/12
3.5K0
BI技巧丨按列排序
数据集 | 性别(按名称)数据集
该数据集将这些时间段内男婴和女婴的名字的原始计数结合在一起,然后计算出给定总数的名字的概率。来源数据集来自美国,英国,加拿大,澳大利亚等国家的政府机构。
数据科学人工智能
2022/03/30
4980
数据集 | 性别(按名称)数据集
SEO按天付费,是否合适?
企业因对SEO不重视或雇佣不到优秀的seoer而导致企业网站得不得好的排名比比皆是,所以企业为了减轻在网络营销方面的精力和费用,而选择做SEO外包服务,一般来说我们认为这是一个既经济又省力的方式,但其弊端也不少,比如本地SEO优化公司的实力或优化费用可能并不理想,而互联网上的又不太可信,但最近出现了一种方式SEO按天付费,或者是SEO见到效果再付费,从字面意思可以说是直接的解决了企业的问题,但实际上确实如此吗?
蝙蝠侠IT
2020/11/20
7450
SEO按天付费,是否合适?
表格按列方向上渲染数据
如果是一条数据和一个对应的值就不会出现问题。但是如果某一个数据的值有多个,并且需要显示在不同的行的话就会有问题。问题是:会循环出多个td在一行中。
从入门到进错门
2018/08/21
1.4K0
表格按列方向上渲染数据
数据结构 || 二维数组按行存储和按列存储[通俗易懂]
设有数组A[n,m],数组的每个元素长度为3字节,n的值为1~8,m的值为1~10,数组从内存收地址BA开始顺序存放,请分别用列存储方式和行存储方式求A[5,8]的存储首地址为多少。
全栈程序员站长
2022/09/13
5.1K0
leetcode-867-Transpose Matrix(矩阵由按行存储变成按列存储)
Given a matrix A, return the transpose of A.
chenjx85
2018/08/01
1.4K0
java中的sort排序算法_vba中sort按某列排序
C++中提供了sort函数,可以让程序员轻松地调用排序算法,JAVA中也有相应的函数。
全栈程序员站长
2022/09/21
2.3K0
Logstash 索引数据按周归档
日志分析平台对网络设备和服务器日志进行收集时发现索引数据按天归档单个索引的大小能控制在1G 以内,ELk集群产生的索引数量过多,于是决定将索引数据归档规则改为按周归档。
Kevin song
2021/01/08
1.4K0
Python-科学计算-pandas-14-df按行按列进行转换
系统:Windows 7 语言版本:Anaconda3-4.3.0.1-Windows-x86_64 编辑器:pycharm-community-2016.3.2 pandas:0.19.2
zishendianxia
2020/10/10
2K0
Python-科学计算-pandas-14-df按行按列进行转换
如何实现按距离排序、范围查找
本文主要介绍了在Java中如何实现基于地理位置的搜索,包括使用Geocoding API和Spatial4j库,以及如何在Spring Boot应用中集成和实现搜索功能。此外,还介绍了如何对搜索结果进行排序和过滤,以及如何使用Elasticsearch进行全文搜索。
高爽
2017/12/28
4.6K0
如何实现按距离排序、范围查找
【R语言】数据框按两列排序
我相信大家经常会使用Excel对数据进行排序。有时候我们会按照两个条件来对数据排序。假设我们手上有下面这套数据,9个人,第二列(score)为他们的考试成绩,第三列(code)为对应的评级。80分以上为优秀,60-80为良,60以下为差。
生信交流平台
2022/09/21
2.3K0
【R语言】数据框按两列排序
Java中只有按值传递,没有按引用传递!
今天,我在一本面试书上看到了关于java的一个参数传递的问题: 写道 java中对象作为参数传递给一个方法,到底是值传递,还是引用传递? 我毫无疑问的回答:“引用传递!”,并且还觉得自己对java的这一特性很是熟悉! 结果发现,我错了! 答案是: 值传递!Java中只有按值传递,没有按引用传递! 回家后我就迫不及待地查询了这个问题,觉得自己对java这么基础的问题都搞错实在太丢人! 综合网上的描述,我大概了解了是怎么回事,现在整理如下,如有不对之处望大神提出! 先来看一个作为程序员都熟悉的值传递的例子:
java达人
2018/01/31
1.2K0
Java中只有按值传递,没有按引用传递!
pandas排序 按索引和值排序
pandas 排序 import pandas as pd import numpy as np unsorted_df=pd.DataFrame(np.random.randn(10,2),index=[1,4,6,2,3,5,9,8,0,7],columns=['col2','col1']) print (unsorted_df) # 按标签排序 sorted_df = unsorted_df.sort_index(ascending=False) # 降序 print (sorted_df) s
AI拉呱
2021/01/14
2.8K0
点击加载更多

相似问题

按名称而不是按索引访问网格列

10

我是否可以按名称而不是按索引引用Smartsheet列?

18

Oracle OCCI -按名称而不是按索引获取列

13

如何按名称而不是按索引访问TDBGrid列?

38

按索引引用列,而不是按名称引用

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文