3

我需要将已处理的网络文件共享列表(保留完整的 UNC 路径)存储在内存中,因此我不再处理这些文件夹。

我打算使用一个数组,但现在我认为哈希表可能是一个更快的选择。如果该文件夹路径(字符串值)已经存在,我将需要检查几个地方。

什么是最快的(检查该值是否存在)和更少的内存消耗选项?

  1. 使用 key=folder 路径和空值将文件夹路径存储在哈希表中
  2. 将文件夹路径存储在一维数组中
  3. 别的东西

更新:我刚刚通过生成 50000 个字符串并进行 3 次查找来运行一些测试,例如在下面指出的那个线程中。我还研究了内存消耗,HashSet 是赢家。HashTable 仍然是一个不错的选择,但 Array 是最糟糕的选择。

数组 - 创建 125048 毫秒,查找 37 毫秒,RAM 中 18Mb

哈希 - 创建 2167 毫秒,查找 0.74 毫秒,RAM 中 2.4Mb

HashSet -创建1966毫秒,查找0.02毫秒,RAM中1.4Mb

4

1 回答 1

4

在这种情况下,hastable 比数组更可取,因为您将在填充后查询键并且项目数相对较大。我将从哈希表开始。如果性能不合适,请尝试其他方法,例如使用 .net 的Dictionary(T,V)或 .net 3.5+ 的HashSet(T)

另外,这里有一个你会感兴趣的链接:

Powershell 2 和 .NET:针对超大哈希表进行优化?

于 2012-10-25T19:11:33.117 回答