轻量级实时文件读取器

本文关键字:读取 文件 实时 轻量级 | 更新日期: 2023-09-27 18:00:58

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

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

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

  1. 当一个事件出现时(比如说,文件就绪(,我远远落后于处理另一个文件。因此,如果我依赖FileSystemWatcher,我将错过事件
  2. 由于文件无论如何都会在那里,而且我确切地知道我的文件名,我想如果它们在那里,我可以继续阅读它们

有人有什么建议吗?现在我已经尝试了FileSystemWatcher,它跳过了很多文件。我也使用while(true(之类的外观来读取文件,直到所有文件都得到处理,但它消耗了90%的CPU。

如有任何建议,我们将不胜感激。

轻量级实时文件读取器

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

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

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

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

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