目录监控

时间:2010-05-08 08:37:25

标签: c# file directory

检查添加到目录中的新文件的最佳方法是什么,我不认为filesystemwatcher是合适的,因为这不是一个始终在线服务,而是一个在我的程序启动时运行的方法。

我正在监控的文件夹结构中有超过20,000个文件,目前我正在单独检查每个文件以查看文件路径是否在我的数据库表中,但这需要大约十分钟而且我想加快速度是可能的,

我可以存储上次检查文件夹的日期 - 是否可以轻松获取所有带有createddate>的文件最后检查日期。

谁有任何想法?

由于

标记

6 个答案:

答案 0 :(得分:5)

您的方法是唯一可行的(即文件系统观察程序允许您查看更改,而不是检查启动)。

找出需要这么长时间的事情。 20.000次检查不应该花费10分钟 - 最多可能是1分钟。你的程序写得很慢。你是如何测试它的?

提示:不要问数据库,将所有文件列表放入内存,列出数据库中的所有文件,检查内存。 20.000对数据库的SQL语句太慢,这样你就需要ONE来获取列表。

答案 1 :(得分:2)

对于20,000个文件,10分钟似乎非常长。你打算做比较怎么样?您的建议也不考虑已删除的文件。如果要从数据库中删除它们,则必须进行完整比较。

也许问题是数据库往返。您可以按大块(或一次全部)从数据库中检索已知文件列表,按字母顺序排序。对本地文件列表进行排序并遍历两个列表,处理丢失的或新的条目。

答案 2 :(得分:1)

FileSystemWatchernot reliable,所以即使您可以使用某项服务,也不一定适合您。

我能看到的两个选项是:

  1. 保留您了解的文件列表,并与此列表进行比较。这将允许您查看文件是否已添加,删除等。将此列表保留在内存中,而不是查询每个文件的数据库。
  2. 如您所知,存储时间戳并与之进行比较。

答案 3 :(得分:1)

您可以在某处创建onfile创建的最后一个时间戳,它很简单,可以为您工作。

答案 4 :(得分:0)

你能写一个在那台机器上运行的服务吗?然后该服务可以使用FileSystemWtcher

答案 5 :(得分:0)

拥有像Kevin Jones这样的FileSystemWatcher服务可能是最实用的答案,但还有其他一些选择。

如果在Linux机器上使用Samba挂载目录,可以使用inotify监视目录。那当然假设你不介意分割你的平台,但这就是inotify的用途。

然后更正确,但相应地减少获得批准的机会,如果你正在监视一个包含20K文件的目录,那么可能是时候改进你的系统架构了。不太了解您的应用程序,听起来像消息队列可能值得一看。