我正在编写一个应用程序,我必须在其中检测目录中的文件更改。新文件,丢失文件等。每次扫描都相对于前一次。
我正在进行递归扫描以检索所有路径并与我数据库中的上一个列表进行比较。这样做的问题是某些客户端需要扫描数百万个文件。这使得系统消耗很多的资源(cpu和内存)。我甚至得到SystemOutOfMemory
例外。
所以我想知道是否有更好的方法来查找这些更改,可能没有完整扫描。
重要说明:我无法“监控”事件,因为我必须检测扫描之间发生的更改,无论系统是否正在运行。我不能失去一个改变。因此,除非它能够捕获未运行时所做的更改我不能使用FileSystemWatcher 。
答案 0 :(得分:1)
不知道你正在扫描的目录是如何构建的,假设你有类似于下面的例子。
000/
001/
002/
每个目录的子目录都与顶级目录相同。
这将允许您在内部构建像git一样的索引。 存储每个树项(子目录,文件)的标识符,以便于比较。
然后,您应该能够通过将任务拆分为多个子任务来对抗SystemOutOfMemoryException。
关于运行时,我认为没有可能降低它,因为系统的一个组件总是需要观察或比较每个项目。
如果在写入文件时,目录的修改日期是可靠更新的,您可以将其作为比较的一部分。