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






4.04/5 (7投票s)
System.Data.DataRow 列的整数和字符串索引性能对比
背景
当我为一个 Pocket PC 应用程序开发时,该应用程序使用了相当大的 DataSet
,我一直在思考在哪里可以获得至少一些性能提升。我正在将一些数据填充到树状视图控件中,存储一些数据,从 DataTable
中进行选择,并从 DataRow
的列中获取数据。如你所知,你可以使用 string
索引(dataRow["NAME"]
)或整数索引 dataRow[3]
来访问 DataRow
的列。
我想测试两种索引器的性能——我只想知道我是否仍然可以使用 string
索引器(它们更方便使用)——或者将此应用程序的代码重构为使用整数索引。所以,这就是性能测试器。
代码
解决此问题的方案是创建一个足够大的数据库(在我的例子中是 DataTable
),然后在循环中遍历行,并测试索引本身。这通过将其作为参数传递给一个虚拟函数来完成:
dummy(dataRow["STR1"]));
DataTable
的结构如下

列的命名方式与其数据类型相同,因此 STR1
是一个 string
,INT1
是一个 integer
,DATE1
是 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 日:初始发布