什么是最好的方式来检查添加到目录中的新文件,我不认为文件系统监视器是合适的,因为这不是一个永远在线的服务,而是一个当我的程序启动时运行的方法。目录监控
我正在监视的文件夹结构中有超过20,000个文件,目前我正逐个检查每个文件以查看文件路径是否在我的数据库表中,但这大约需要十分钟,我想加快它
我可以存储上次检查文件夹的日期 - 是否容易得到具有createddate>上次检查日期的所有文件。
任何人有任何想法?
感谢
马克
什么是最好的方式来检查添加到目录中的新文件,我不认为文件系统监视器是合适的,因为这不是一个永远在线的服务,而是一个当我的程序启动时运行的方法。目录监控
我正在监视的文件夹结构中有超过20,000个文件,目前我正逐个检查每个文件以查看文件路径是否在我的数据库表中,但这大约需要十分钟,我想加快它
我可以存储上次检查文件夹的日期 - 是否容易得到具有createddate>上次检查日期的所有文件。
任何人有任何想法?
感谢
马克
您的方法是唯一可行的(即文件系统监视器允许您查看更改,而不是检查启动)。
找出需要这么长时间。 20.000次检查不应花费10分钟 - 最多1次。你的程序写得很慢。你如何测试它?
提示:不要问数据库,获取所有文件列表到内存中,数据库中所有文件的列表,检查内存。 20.000到数据库的SQL语句太慢了,这样你需要ONE来获取列表。
提示tomtom欢呼,你说得对我的程序调用每个文件的数据库,当然我可以重构一个区域。 – foz1284 2010-05-08 09:09:03
对于20,000个文件,10分钟似乎非常长。你如何进行比较?您的建议也不会考虑删除的文件。如果你想从数据库中删除那些,你将不得不做一个完整的比较。
也许问题是数据库往返旅行。您可以从数据库中以大块(或全部一次)检索已知文件列表,并按字母顺序排序。对本地文件列表进行排序,然后走两个列表,随时处理缺失或新条目。
有如Kevin Jones所说的FileSystemWatcher服务可能是最实用的答案,但还有其他一些选择。
如果您在Linux机器上安装Samba,可以使用inotify观察目录。这当然假设你不介意分割你的平台,但这就是通知的目的。
然后更正确,但你得到一个反超的相应较少的机会,如果你坐在监控的目录,在它的文件20K它可能是时间去发展你的系统架构。不了解所有关于应用程序的更多信息,这听起来像是一个消息队列可能值得关注。
其图片管理型应用程序,以便结构仅仅是My Pictures文件夹,如thorrarin说,有这个程序,它可能只零星地运行服务运行似乎矫枉过正 – foz1284 2010-05-08 09:32:01
可以在某处onfile创建的最后一个时间戳写的,很简单,可以为你工作。
这是一个有趣的问题。我不知道如何跟踪目录的更改,而无需驻留内存的程序来注册这些事件。 (顺便说一句,这些观察者也有其局限性)。您可能必须重新扫描目录树(启动时,定期,每当),唯一的问题是如何尽可能快速高效地完成目录树。 – 2010-05-08 08:59:31