如何编写用于轮询目录以获取新文件的Windows服务?

0 c# web-services

我做了一个窗口服务,它基本上是在我的机器上读取一个临时文件,将其读取到数据库然后删除它.我已经在onStart方法中编写了这些操作的代码,因此我需要在需要它时再次重新启动服务,但我真正需要的是服务应该自动感知文件夹中文件的创建然后工作在上面.

那么我应该将这个特定代码放在我的Windows服务中?

Pet*_*old 5

由于不保证FileSystemWatcher在所有文件系统更改时通知您,我建议使用具有设置间隔的Timer轮询它.这种方法在系统资源上也更容易.

在内部,FSW缓冲从文件系统接收的事件.如果同时发生太多事件,则此缓冲区将溢出,您将开始丢失事件.除非你的事件处理程序代码很快完成或者你使用了一些排队机制,否则你也会开始丢失事件.IMO,这使FSW成为一种不太可靠的100%方法.

这里,讨论FSW VS性能的文章中更多的细节.

关于系统资源的注释:FSW依赖于向OS文件系统注册回调.我没有关于这在系统资源中占多少的指标.我建议使用定时器主动轮询系统,不需要文件系统中的此类资源.您可以每30秒或每5分钟轮询一次文件系统,具体取决于您需要多快获取文件.

除非你真的需要近乎实时的行为......