【发布时间】:2012-10-25 04:34:07
【问题描述】:
我需要在内存中保存一些关于可能大量文件和目录(通常多达几十万)的数据。显而易见的做法是使用Dictionary<string, Something>,并以路径为键,但是这样做有两个问题:
- 许多文件的大部分路径都相同,因此存储每个文件的完整路径可能会浪费内存
- 我需要能够快速访问有关目录所有后代的数据;使用字典,唯一的方法是测试每个键并检查它是否以指定路径开头,这是非常低效的
这个问题似乎很适合使用前缀树(或trie),路径段作为“字符”。我尝试实现它,通过前缀查找性能还不错(大约比字典快4倍),但它有两个问题:
- 内存消耗没有减少,可能是因为每个节点的子节点列表的开销
- 构建时间比使用字典要差得多(填充集合要慢 4 倍左右)
我确定这一定是一个非常常见的问题,所以也许有一些我不知道的众所周知的解决方案?
【问题讨论】:
-
你看过CloudGraph这样的东西吗?
-
@Tigran,谢谢,但它没有提供任何关于它可以做什么的具体细节......此外,它说“测试版目前计划于 2012 年第一季度发布”,但显然是仍处于测试阶段;我现在需要它,而且我需要它很强大,所以不能选择测试版。
-
@ThomasLevesque:是的,我知道。这只是一个提示(方向)……在我的看来,几乎不可能同时拥有健壮的图形(而不是树)结构、快速构建和选择性能。在其中一些中,您必须“支付”并使用它们才能在 当前 项目中获得最佳结果。顺便说一句,我也很想听听其他人,他们在 .NET 方面有经验。
标签: c# data-structures dictionary path trie