在 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 的属性之一是文件的绝对路径:使用它作为键。

哈希表查找成本低(而且速度快)。

【讨论】:

为什么要使用这样的冗余结构?如果字典中的stringFileInfo 中的FullName 相同,则没有任何意义。 OP 能够进行快速查找似乎没什么价值。毕竟,如果他们有字符串,他们可以做new FileInfo(fileName)

以上是关于在 C# 中存储和比较目录的最有效数据结构是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在数据库中存储标签的最有效方法是啥?

在多维数组和单个数组之间存储数据的最有效方法是啥?

在 SQLCe 数据库中存储对象的最有效方法是啥?

在 Marklogic 数据库中存储名称/值对的最有效方法是啥

使用 C#,将包含二进制数据的字符串转换为字节数组的最有效方法是啥

在 c# 中拥有一个采用任何类型的可索引列表的方法的最有效方法是啥