什么更快解析,DataSet.Tables或Dictionary <string,tables =“”> </string,>

时间:2008-12-10 05:16:44

标签: .net dictionary datatable comparison

我正在为导入导出测试(算法读取和编写复杂数据结构到我们的数据库,而不仅仅是测试IO操作)创建一个模拟数据库,并且我正在尝试决定是否使用DataSet来存储模拟表(按表名称)在faux-database或Dictionary()

在按名称检索数据表方面,我期望从dataset.Tables [“TableName”]或字典&lt;“TableName”&gt;获得更好的性能。 (来自词典()?

2 个答案:

答案 0 :(得分:7)

实际上,由于执行字典逻辑(haches,buckets等)固有的复杂性,Dictionary<,>通常比线性搜索慢 。在我的测试中,截止值(Dictionary<,>开始更快)通常约为150个元素。而且由于您通常拥有的表少于150,我会对性能的线性列表感到满意。

(这并不意味着“不要使用Dictionary<T>;它只是意味着性能可能不是这个特定用例的主要原因;唯一的密钥执法和foo [“bar”]模型可能是)

部分原因是由于获取哈希的复杂性 - GetHashCode() string特别相对昂贵(尽管int.GetHashCode()速度非常快;-p)。

实际上,在大多数小型数据中,您永远不会注意到两者之间的差异。如果您有大量数据,那么显然您需要相应地规划和编码。

Dictionary<,>List<>之类的其他差异就像唯一性一样:Dictionary<,>不会让您拥有重复的密钥(尽管Lookup<,>中有{{1}}。 NET 3.5将)。

答案 1 :(得分:4)

DataSet.Tables使用ArrayList在内部实现。按名称查找表涉及对列表中的表进行线性搜索以及大量的转换。因此,使用基于散列和通用的字典几乎肯定会更快。 (虽然你需要大量的表格和/或大量的访问才能产生很大的不同。)