2

我正在为导入导出测试创建一个模拟数据库(算法读取和写入我们的数据库的复杂数据结构,而不仅仅是测试 IO 操作),并试图决定是否使用 DataSet 来存储模拟表(按表name) 在虚假数据库中,或 Dictionary()

在按名称检索数据表方面,我希望从 dataset.Tables["TableName"] 或 dictionary<"TableName"> (来自 Dictionary() 中获得更好的性能吗?

4

2 回答 2

7

实际上,由于执行字典逻辑(哈希、桶等)的固有复杂性,Dictionary<,>通常比线性搜索慢。在我的测试中,截止(Dictionary<,>开始变得更快)通常在 150 个元素左右。而且由于您的表通常少于 150 个,因此我很乐意使用线性列表来提高性能。

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

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

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

Dictionary<,>a和类似 a的其他区别List<>是唯一性:aDictionary<,>不会让您拥有重复的键(尽管Lookup<,>.NET 3.5 中的 a 会)。

于 2008-12-10T09:20:22.677 回答
4

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

于 2008-12-10T05:29:27.917 回答