我需要在内存中存储已处理的网络文件共享列表(保留完整的UNC路径),以便我不再处理这些文件夹。
我打算使用一个数组,但现在我认为哈希表可能是一个更快的选择。如果文件夹路径(字符串值)已经存在,我将需要检查几个地方。
什么是最快的(检查是否存在该值)和更少的内存消耗选项?
更新: 我只是通过生成50000个字符串并执行3次查找来运行一些测试,例如在下面指向的线程中。我还看了一下内存消耗,而HashSet则是赢家。 HashTable仍然是一个不错的选择,但Array是最糟糕的选择。
数组 - 创建125048毫秒,查找37毫秒,内存18兆字节
哈希 - 创建时间为2167毫秒,查找时为0.74毫秒,RAM中为2.4毫秒
HashSet - 1966 ms创建, 0.02 ms来查找, 1.4Mb 在RAM中
答案 0 :(得分:4)
在这种情况下,hastable比阵列更可取,因为在填充它之后你将要查询键并且项目数量相对较大。我会从哈希表开始。如果表现不合适,那就试试别的,比如使用.net的Dictionary(T,V)或.net 3.5 +'HashSet(T)
此外,这是您感兴趣的链接:
Powershell 2 and .NET: Optimize for extremely large hash tables?