存储一长串值的最佳方法

Posted

技术标签:

【中文标题】存储一长串值的最佳方法【英文标题】:best way to store the long list of values 【发布时间】:2012-10-16 00:47:54 【问题描述】:

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

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

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

    将文件夹路径存储在带有 key=folder 路径和空值的哈希表中 将文件夹路径存储在一维数组中 别的东西

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

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

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

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

【问题讨论】:

您希望您的列表有多大? 轻松上万个文件夹 您的路径是在文本文件中还是来自其他地方? 我首先构建文件夹列表作为脚本的一部分 【参考方案1】:

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

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

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

【讨论】:

感谢您的想法和链接 - 我没有意识到插入哈希需要大部分时间。我现在正在测试这个...... 我已经用我的测试结果更新了这个问题 - hashset 是赢家!

以上是关于存储一长串值的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

在表格视图中获取“值”的最佳方法 [关闭]

在 UITableView 中进行分页的最佳方法

在 mysql 中存储 python timedelta 值的最佳方法是啥?

在数据库中存储 Mandelbrot 值的最佳方法可能是啥?

编写一长串 if 语句的速记方法

使用strings.xml 在数据库上存储多语言值的最佳方法?