我有一个从实时数据流写入的二进制数据文件,因此它会随着流的增长而不断增长。同时,我需要在只读模式下同时打开它以在我的应用程序上显示数据(时间序列图表)。
打开整个文件需要几分钟,因为它很漂亮大(几百'MBytes)。
我想做的是,不是每隔x秒重新打开/读取整个文件,而是只读取添加到文件中的最后数据并将其附加到已经读取的数据上。
答案 0 :(得分:3)
我建议使用 FileSystemWatcher 来通知文件的更改。从那里,缓存信息,例如事件之间文件的大小,并添加一些逻辑,只响应整行等。您可以使用FileStream类的Seek()方法跳转到文件中的特定点并读取只是从那里。我希望它有所帮助。
答案 1 :(得分:0)
如果您控制此文件的写入,我会将其拆分为多个预定义大小的文件。
当writer确定当前文件大于50MB时,关闭它并立即创建一个新文件来写入数据。编写此数据的过程应始终知道当前文件,以便将接收到的数据写入。
读者线程/进程将按顺序读取所有这些文件,在完全读取当前文件时跳转到下一个文件。
答案 2 :(得分:0)
您可以使用FileSystemWatcher监视文件中的更改,例如此处给出的示例:Reading changes in a file in real-time using .NET。
但是我建议您评估另一个解决方案,包括像RabbitMQ或Redis这样的队列 - 任何具有Subscriber-Publisher模型的队列。然后,您只需将实时数据推送到队列中,并且将有2个不同的侦听器(订阅者) - 一个用于保存在文件中,另一个用于处理最后附加的数据。这样,您可以通过分配应用程序的负载来实现更大的灵活性。