我需要在内存中保留一些关于可能大量文件和目录(通常多达几十万)的数据。显而易见的做法是使用Dictionary<string, Something>
带有路径的a作为key,但是这样做有两个问题:
- 许多文件将有很大一部分路径是相同的,因此存储每个文件的完整路径可能会浪费内存
- 我需要能够快速访问有关目录所有后代的数据;使用字典,唯一的方法是测试每个键并检查它是否以指定的路径开头,这是非常低效的
这个问题似乎是使用前缀树(或trie)的一个很好的候选,路径段作为“字符”。我尝试实现它,通过前缀查找性能并不算太差(大约比字典快 4 倍),但它有两个问题:
- 内存消耗没有减少,可能是因为每个节点的孩子列表的开销
- 构建时间比使用字典要差得多(填充集合要慢 4 倍)
我确定这一定是一个非常普遍的问题,所以也许有一些我不知道的众所周知的解决方案?