-1

这是我的问题(C#,.net3.5):

  1. 我基本上需要一个文件阅读器来读取文件,这些文件还没有,但会立即从文件夹中生成。
  2. 我确切地知道这些文件的名称是什么。
  3. 我想读取一个文件,处理该文件(一些统计数据计算),然后在当前处理完成后移至下一个文件
  4. 最重要的是,我希望我的文件阅读器是轻量级版本,这意味着尽可能少地消耗 CPU 资源。

我不会考虑使用 FileSystemWatcher,因为:

  1. 当一个事件进来(比如,文件准备好)时,我落后于处理另一个文件。因此,如果我依赖 FileSystemWatcher,我会错过事件。
  2. 因为无论如何文件都会在那里,而且我确切地知道我的文件名,我想如果它们在那里,我可以继续阅读它们。

有人有什么建议吗?现在我已经尝试过 FileSystemWatcher,它跳过了很多文件。我还使用了一段时间(true),例如查看文件,直到所有文件都得到处理,但它消耗 90% 的 CPU。

任何建议都非常感谢。

4

2 回答 2

3

一个建议:在多个线程上使用文件系统观察程序,这些线程将队列中的文件泵送以在其他线程上处理。如果您仍然继续删除文件,那么您可以增加 FileSystemWatcher 缓冲区的大小,但这种方法应该有效。

于 2013-02-25T22:43:42.070 回答
-1

我的问题是,您必须立即解析文件有什么急事?

我会每隔 x 分钟或秒检查一次目录中的所有文件,将它们放入队列并处理它们。如果您出于某种原因想要保留它们,请删除这些文件或将它们重命名为不同的扩展名。

在捕获最后一个文件后的 x 次计时器上检查是否有新文件。是的,你会根据你的负载得到一些备份,但是我构建了一个解析器系统,每分钟输入数百条记录,使用这种方法工作得很好而且很花哨。

当在该 x 时间内没有要解析的记录时,程序会中断,直到它检查下一个间隔。这很好,因为您可以使用此方法以特定顺序检查多个目录以及不同进程。

于 2013-02-26T05:03:17.997 回答