【问题标题】:What's a fast way to scan for directory changes without monitoring?什么是在不监视的情况下扫描目录更改的快速方法?
【发布时间】:2016-08-17 11:55:13
【问题描述】:

我正在编写一个应用程序,我必须在其中检测目录中的文件更改。新文件、丢失文件等。每次扫描都相对于前一次。

我目前正在进行递归扫描以检索所有路径并与我数据库中的前一个列表进行比较。这样做的问题是某些客户端需要扫描数百万个文件。这使得系统消耗大量资源(cpu 和内存)。我什至收到了SystemOutOfMemory 异常。

所以我想知道是否有更好的方法来查找这些更改,可能不需要完整扫描。

重要提示:我无法“监控”事件,因为无论系统是否正在运行,我都必须检测扫描之间发生的变化。我不能失去任何改变。因此,除非它能够捕获在未运行时所做的更改我不能为此使用 FileSystemWatcher

【问题讨论】:

标签: c# file directory filesystems


【解决方案1】:

在不知道您正在扫描的目录的结构的情况下,假设您有与以下示例类似的内容。

000/
001/
002/

每个目录都有类似于顶级目录的子目录。

这将允许您像 git 那样在内部建立索引。 存储每个树项(子目录、文件)的标识符以便于比较。

然后您应该能够通过将任务拆分为多个子任务来应对 SystemOutOfMemoryException。

关于运行时,我认为不可能降低它,因为您系统的一个组件将始终需要观察或比较每个项目。

如果写入文件时目录的修改日期可靠地更新,您可以将其用作比较的一部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 2011-03-14
    相关资源
    最近更新 更多