【问题标题】:Using .Contains Method with Cached Hashset将 .Contains 方法与缓存的 Hashset 一起使用
【发布时间】:2011-07-26 03:31:47
【问题描述】:

我知道哈希集上的 .Contains 方法很快。我的问题是在重复使用 .Contains 方法之前获取哈希集数据的最佳方法是什么?

我可以想到 2 个选项。这两个示例都将在长度未定的循环中调用。


1) 直接调用返回缓存hashset的方法,使用.Contains方法。

IF (GetHashSetMethod.Contains("TESTVALUE") THEN BLAH, BLAH, BLAH...

2) 在循环外创建一个新的hashset,并将缓存的hashset数据加载到其中,这样返回hashset的方法只调用一次,然后使用.Contains方法。

DIM HashTest AS HASHSET(OF String) = GetHashSetMethod

然后循环:

if (HashTest.Contains("TESTVALUE") THEN BLAH, BLAH, BLAH...

我一直在使用方法 1。我是否应该考虑切换到方法 2?有没有我什至没有想到的第三种选择?因为数据一开始就被缓存,所以这是否重要?

【问题讨论】:

  • 您是否尝试过选项 2,看看它是否比选项 1 更快或更慢?
  • 实际上,我已经对其进行了测试,并没有真正看到任何差异,但我没想到会看到任何重大的性能差异。我想知道我是否应该首先这样做。对于这种我不知道的事情是否有普遍接受的最佳实践,或者在这种情况下一致性是最重要的事情?
  • 我认为您在第一个示例中的GetHashSetMethod 之后缺少一对()

标签: .net vb.net hashset


【解决方案1】:

在速度方面,答案通常是两种方式都写,看看你是否可以真正衡量出有意义的差异。

为了代码清晰,我建议您选择解决方案 2。如果一切顺利,它将更容易理解、维护和调试代码。

【讨论】:

    【解决方案2】:

    一般来说,如果你循环,你应该在循环外做所有可以在循环外完成的事情。

    它可能不会导致显着的性能变化,因为当今的处理器速度非常快,而且编译器可能能够优化代码。但是,在我看来,它更干净。循环内的代码专注于自己的目的,不必在每一步都执行“设置”代码。

    另一个考虑因素是更改代码。如果您今天的GetHashSetMethod 只是返回对单例的引用,您将不会体验到任何速度差异。但是,一旦有人将其更改为(例如)从文件中加载哈希集数据,如果您得到 HashSet n-times,就会遇到问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-06
      • 1970-01-01
      • 2012-10-31
      • 2016-11-04
      • 1970-01-01
      • 2014-07-18
      • 2017-06-25
      • 1970-01-01
      相关资源
      最近更新 更多