代码之家  ›  专栏  ›  技术社区  ›  johnc

更快的解决方法,dataset.tables或dictionary<string,tables>

  •  2
  • johnc  · 技术社区  · 16 年前

    我正在创建一个模拟数据库,用于导入导出测试(算法读取和写入复杂的数据结构到我们的数据库,而不仅仅是测试IO操作),并试图决定是否使用数据集将模拟表(按表名)存储在人造数据库或字典()中。

    在按名称检索数据表方面,我是否希望从dataset.tables[“tablename”]或dictionary<“tablename”>(from dictionary())获得更好的性能?

    2 回复  |  直到 16 年前
        1
  •  7
  •   Marc Gravell    16 年前

    事实上, Dictionary<,> 往往是 更慢的 而不是线性搜索,因为执行字典逻辑(haches、bucket等)的固有复杂性。在我的测试中, 词典<,> 开始变快)通常在150个元素左右。而且,由于您的表通常少于150个,所以我很乐意看到性能的线性列表。

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

    部分原因在于获取哈希的复杂性 GetHashCode() 对于 string 尤其是相对昂贵(尽管 int.GetHashCode() 速度惊人;-p)。

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

    A之间的其他差异 词典<,> 有点像 List<> 是独一无二的东西吗? 词典<,> 不会让你有重复的钥匙(尽管 Lookup<,> 在.NET 3.5中)。

        2
  •  4
  •   Eric Rosenberger    16 年前

    表是使用arraylist在内部实现的。按名称查找表涉及对列表中的表进行线性搜索和大量转换。因此,使用基于哈希的通用字典几乎肯定会更快。(尽管您需要大量的表和/或大量的访问来使其产生很大的差异。)