【问题标题】:Performance of adding and removing values from HashSet<T> versus checking a flag in a Dictionary<T, bool>从 HashSet<T> 添加和删除值与检查 Dictionary<T, bool> 中的标志的性能
【发布时间】:2012-03-14 20:15:02
【问题描述】:

在我的代码中,我想检查一个任务(在另一个线程中)是否正在运行。

我正在考虑使用Dictionary&lt;String, bool&gt;,并检查布尔值。但是,由于我不知道启动时所有可能的任务,所以我必须在第一次启动任务时动态填充此字典并像这样查询它:

Boolean status;
if (_tasks.TryGetValue(lockName, out  status))
{
    return status;
}
return false;

由于没有这个布尔值,仅仅存在条目就可以提供信息,我正在考虑使用 Hashset&lt;String&gt; 并添加/删除值而不是设置标志。

return _tasks.Contains(name)

我想知道这两种方法中的哪一种会产生最好的结果。我预计写入操作的数量与读取数量大致相同。

【问题讨论】:

  • 我认为 Guffa 就在这里,但如果它真的很重要,您应该考虑设置一个简单的实验并测量两者的时间 - 这应该不会太难,而且您以这种方式获得可靠的事实
  • 同意,我同时也在做。但我认为这是一个很好的问题(对于 Google 搜索后代)

标签: c# performance dictionary hashset


【解决方案1】:

不会有任何显着差异。

两者都使用哈希查找来检查密钥,这接近于 O(1) 操作。

【讨论】:

    猜你喜欢
    • 2015-10-16
    • 1970-01-01
    • 2011-12-27
    • 1970-01-01
    • 2011-06-05
    • 2017-05-27
    • 2010-10-09
    • 2010-12-21
    • 1970-01-01
    相关资源
    最近更新 更多