存储长值列表的最佳方法

时间:2012-10-25 18:54:51

标签: arrays list powershell hashtable sorted

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

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

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

  1. 使用key =文件夹路径和空值
  2. 将文件夹路径存储在哈希表中
  3. 以一维数组存储文件夹路径
  4. 其他东西
  5. 更新: 我只是通过生成50000个字符串并执行3次查找来运行一些测试,例如在下面指向的线程中。我还看了一下内存消耗,而HashSet则是赢家。 HashTable仍然是一个不错的选择,但Array是最糟糕的选择。

    数组 - 创建125048毫秒,查找37毫秒,内存18兆字节

    哈希 - 创建时间为2167毫秒,查找时为0.74毫秒,RAM中为2.4毫秒

    HashSet - 1966 ms创建, 0.02 ms来查找, 1.4Mb 在RAM中

1 个答案:

答案 0 :(得分:4)

在这种情况下,hastable比阵列更可取,因为在填充它之后你将要查询键并且项目数量相对较大。我会从哈希表开始。如果表现不合适,那就试试别的,比如使用.net的Dictionary(T,V)或.net 3.5 +'HashSet(T)

此外,这是您感兴趣的链接:

Powershell 2 and .NET: Optimize for extremely large hash tables?