【问题标题】:What's quicker at resolving, DataSet.Tables or Dictionary<string, Tables>解决方法更快,DataSet.Tables 或 Dictionary<string, Tables>
【发布时间】:2010-09-26 04:33:47
【问题描述】:

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

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

【问题讨论】:

    标签: .net dictionary datatable comparison


    【解决方案1】:

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

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

    这部分是由于获取哈希的复杂性 - 特别是 stringGetHashCode() 相对昂贵(尽管 int.GetHashCode() 的速度快得令人眼花缭乱;-p)。

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

    Dictionary&lt;,&gt;List&lt;&gt; 之类的其他区别是唯一性:Dictionary&lt;,&gt; 不会让您拥有重复的键(尽管 .NET 3.5 中的 Lookup&lt;,&gt; 会)。

    【讨论】:

    • 非常有趣...绝对值得在未来考虑的警告。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2010-10-23
      • 2019-09-14
      • 2012-05-13
      • 1970-01-01
      • 1970-01-01
      • 2012-03-01
      • 2012-09-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多