我正在为导入导出测试(算法读取和编写复杂数据结构到我们的数据库,而不仅仅是测试IO操作)创建一个模拟数据库,并且我正在尝试决定是否使用DataSet来存储模拟表(按表名称)在faux-database或Dictionary()
中在按名称检索数据表方面,我期望从dataset.Tables [“TableName”]或字典<“TableName”>获得更好的性能。 (来自词典()?
答案 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在内部实现。按名称查找表涉及对列表中的表进行线性搜索以及大量的转换。因此,使用基于散列和通用的字典几乎肯定会更快。 (虽然你需要大量的表格和/或大量的访问才能产生很大的不同。)