在 C# 中存储和比较目录的最有效数据结构是啥?
Posted
技术标签:
【中文标题】在 C# 中存储和比较目录的最有效数据结构是啥?【英文标题】:What would be the most effective data structure for storing and comparing directories in C#?在 C# 中存储和比较目录的最有效数据结构是什么? 【发布时间】:2022-01-17 09:50:30 【问题描述】:所以我现在正在尝试用 C# 开发一个应用程序(用于练习),一个简单的文件同步桌面程序,用户可以在其中选择要监视的文件夹,然后每当所述目录发生更改时,将其复制到另一个目录。
我还在上学,刚刚完成了我的数据结构课程,所以我对此还是有点陌生。但我目前认为最好的解决方案是一棵树,对吧?然后我可以使用广度优先搜索进行比较,如果一个节点不匹配,那么我会将节点从原始树复制到重复树。但是,这似乎效率低下,因为我每次都会搜索整棵树。
也可能考虑使用链表。我真的不知道该去哪里。到目前为止,我已经完成的是目录监控,因此每次更改时我都可以保存到日志文件中。所以这很好。但我觉得这是最艰难的部分。任何人都可以提供任何指导吗?
【问题讨论】:
“最有效”对您意味着什么?最快、最少内存、最简单的数据结构、最小的数据结构、最简单的代码、最可重构的代码等 考虑到我对数据结构比较陌生,我可以合理地理解一些东西,高效是指最快的。 合理理解的东西和最快的东西很可能是两种截然不同的东西。为什么速度很重要?因此,例如,如果选项 A 需要 3 毫秒,选项 B 需要 10 毫秒,你在乎吗?如果不是,“最快”是什么意思? 我想速度并不那么重要。您会推荐什么作为起点? 我将只使用两个List<FileInfo>
并比较位置、上次写入时间和文件大小来确定要复制的内容。与遍历内存中的列表相比,文件复制速度较慢。如果您能证明处理能力正在减慢您的速度,我只会担心速度。
【参考方案1】:
使用哈希表(例如,Dictionary<string,FileInfo>
。FileInfo
的属性之一是文件的绝对路径:使用它作为键。
哈希表查找成本低(而且速度快)。
【讨论】:
为什么要使用这样的冗余结构?如果字典中的string
与FileInfo
中的FullName
相同,则没有任何意义。
OP 能够进行快速查找似乎没什么价值。毕竟,如果他们有字符串,他们可以做new FileInfo(fileName)
。以上是关于在 C# 中存储和比较目录的最有效数据结构是啥?的主要内容,如果未能解决你的问题,请参考以下文章
在 Marklogic 数据库中存储名称/值对的最有效方法是啥