65.9K
CodeProject 正在变化。 阅读更多。
Home

DataRow 索引性能(整数 vs. 字符串)

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.04/5 (7投票s)

2007年2月5日

CPOL

2分钟阅读

viewsIcon

58394

downloadIcon

394

System.Data.DataRow 列的整数和字符串索引性能对比

背景

当我为一个 Pocket PC 应用程序开发时,该应用程序使用了相当大的 DataSet,我一直在思考在哪里可以获得至少一些性能提升。我正在将一些数据填充到树状视图控件中,存储一些数据,从 DataTable 中进行选择,并从 DataRow 的列中获取数据。如你所知,你可以使用 string 索引(dataRow["NAME"])或整数索引 dataRow[3] 来访问 DataRow 的列。

我想测试两种索引器的性能——我只想知道我是否仍然可以使用 string 索引器(它们更方便使用)——或者将此应用程序的代码重构为使用整数索引。所以,这就是性能测试器。

代码

解决此问题的方案是创建一个足够大的数据库(在我的例子中是 DataTable ),然后在循环中遍历行,并测试索引本身。这通过将其作为参数传递给一个虚拟函数来完成:

dummy(dataRow["STR1"]));

DataTable 的结构如下

Sample image

列的命名方式与其数据类型相同,因此 STR1 是一个 stringINT1 是一个 integerDATE1 DateTime,等等。

程序首先生成用户输入的行数,然后 n 次进行整数索引测试和 string 索引测试。索引测试 m 次获取表中的每一行,并对该行的每个列调用虚拟函数。

有一个测量过程——完成整数索引测试和字符串索引测试需要多长时间。

最后,应用程序会输出整数索引和字符串索引总共花费的时间,以及每个索引的平均时间。

示例

int indexing
total: 42171,875 ms
each: 421,71875 ms

string indexing
total: 149312,5 ms
each: 1493,125 ms 

结论

根据我在我的机器上的测试结果(Intel Core2 Duo 1,86 GHz,1 GB RAM),整数索引大约比 string 索引快 3.5 - 4 倍(结果因行数和重复次数而异)。

显然,整数索引更快,但是考虑到两种索引器访问列的时间都非常短(大约 1 µs),只有在应用于大量数据时,这种差异才变得明显。

历史

  • 2007 年 2 月 5 日:初始发布
© . All rights reserved.