轻量级实时文件阅读器?

时间:2013-02-25 22:37:13

标签: c# multithreading file-io

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

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

    1. 当一个事件进来时(例如,文件准备就绪),我就在处理另一个文件了。因此,如果我依赖FileSystemWatcher,我将错过事件。
    2. 由于文件将会在那里,并且我完全知道我的文件名,我想如果他们在那里我可以继续阅读它们。
    3. 有人有什么建议吗?现在我尝试过FileSystemWatcher,它跳过了很多文件。我也使用了一段时间(真实)看起来读取文件,直到所有文件都被处理,但它消耗了90%的CPU。

      非常感谢任何建议。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:-1)

我的问题是,你必须立即解析文件是什么?

我会每隔x分钟或几秒钟检查所有文件的目录,将它们放入队列并处理它们。如果由于某种原因想要保留文件,请删除文件或将其重命名为其他扩展名。

在捕获的最后一个文件之后,在计时器上检查x时间以查看是否有新文件。 是的,根据你的负载,你会得到一些备份,但是我建立了一个解析器系统,每分钟输入数百条记录,并且使用这种方法它运行良好和花花公子。

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