【发布时间】:2013-06-10 00:53:11
【问题描述】:
我需要编写一个实时监控应用程序,它将日志文件中的信息存储到网格视图中。 + 可以从我的应用程序中的其他特性/功能进一步处理它们。
我在我的服务器上运行了一个应用程序,它会在奇怪的时间在日志文件中创建条目。 (csv 格式)
这些文件有时可以达到 100mbs。我并不总是想扫描/检查整个文件,因为我知道新的 etries 会总是添加到文件的底部。
我应该如何构建更新函数(在我的实时监控应用程序中)?
- 是否应该比较文件大小,以及文件大小是否发生了变化? -> 检查/更新
- 我应该每 1 分钟检查一次文件吗?
- 我应该检查“修改日期”吗?
顺便说一句,全盘扫描很费时间,能不能通过只扫描新条目来减少呢?
所以我的问题是:最好的解决方法是什么?!
【问题讨论】:
-
您可以尝试在文件更改时使用
FileSystemWatcher进行通知。我不知道它是否适合您的用例。 -
我想你要回答的一个重要问题是,文件多久被修改一次。如果频繁,那么基于时间的检查将比 FileSystemWatcher 更合适。如果不频繁,那么每次修改文件时都可以使用 FileSystemWatcher 进行。
-
白天它(非常)频繁,只是偶尔出现。每分钟/小时的条目差异很大。
-
如果日志没有原因不能在数据库中,我的建议是把它移到数据库中。这将使处理变得更加容易。如果没有,那么定期检查文件将是正确的方法,IMO。我会以某种方式记录您读取的最后一行编号,然后您可以快进到文件中的该位置并从那里开始读取。
-
另外,请参阅this 以了解读取大文件。您有两个选择:MemoryMappedFile 或 StreamReader。一种是让您读取文件中的随机位置,而无需扫描文件。另一个是相反的。 :)
标签: c# events logging gridview csv