有效地在内存中存储和搜索目录树

时间:2010-12-01 09:11:45

标签: c# data-structures

我希望将所有目录存储在一个巨大的驱动器上尽可能高效地存储在内存中,并且能够在给定完整路径的情况下检索目录。每个目录都有它的名称字段(不是它的完整路径)以及指向它的父目录和子目录列表的指针。您认为哪条路可走?

我认为有两种方法:

a)将完整路径存储到字典中的每个目录并执行简单查找。优点:快速,缺点:每个完整路径字符串占用不必要的冗余内存量

b)将实际目录名称存储在字典中,并列出具有该名称的所有目录,然后检查匹配项是否正确:优点:非常快,缺点:必须为每个目录存储列表或使用装箱,用于存储字典中的列表或目录。

c)跳过字典,从根遍历树并通过拆分路径找到匹配。也许使用PLINQ加快速度。优点:字典没有内存开销,缺点:可能比查找慢。

d)其他一些我没想过的方式......

2 个答案:

答案 0 :(得分:3)

如果您可以将子目录存储为字典而不是列表(对于您想要所有子目录的情况,使用Values属性可以轻松完成),那么您可以逐步完成每个步骤的路径是O(1),因此从完整路径中找到目录的复杂性为O(n),其中n是路径中的步数,与系统中的目录数无关。

答案 1 :(得分:-1)

使用atabase。点。如果树不是很小,那么问​​题就是有效的搜索。它需要一个索引。

  

翻译字典,制作一个   穿越整体的枚举器   树并找到匹配

不是“有效”但是最糟糕的解决方案时间明智,这不是一个完全浪费的编程明智,并且使事情变得比没脑子更慢。

问题在于,与在temp目录中使用类似SqlLite的东西相比,高效的部分查找需要一个需要维护大量编程的索引。