繁体   English   中英

随着文件的增长从文件中读取数据

[英]Reading Data from a File as it grows

我有一个从实时数据流写入的二进制数据文件,因此它随着流的增长而不断增长。 同时,我需要在只读模式下同时打开它以在我的应用程序上显示数据(时间序列图表)。

打开整个文件需要几分钟,因为它非常大(几百'MBytes)。
我想要做的是,不是每隔x秒重新打开/读取整个文件,而是只读取添加到文件中的最后一个数据并将其附加到已经读取的数据中。

我建议使用FileSystemWatcher通知文件的更改。 从那里,缓存信息,例如事件之间文件的大小,并添加一些逻辑,只响应整行等。您可以使用FileStream类的Seek()方法跳转到文件中的特定点并读取只是从那里。 我希望它有所帮助。

如果您控制此文件的写入,我会将其拆分为几个预定义大小的文件。

当编写器确定当前文件大于50MB时,关闭它并立即创建一个新文件来写入数据。 写入此数据的过程应始终知道要将接收数据写入的当前文件。

读者线程/进程将按顺序读取所有这些文件,在完全读取当前文件时跳转到下一个文件。

您可以使用FileSystemWatcher来监视文件中的更改,例如此处给出的示例: 使用.NET实时读取文件中的更改

但我建议您评估另一个解决方案,包括像RabbitMQ或Redis这样的队列 - 任何具有Subscriber-Publisher模型的队列。 然后,您只需将实时数据推送到队列中,并且将有2个不同的侦听器(订阅者) - 一个用于保存在文件中,另一个用于处理最后附加的数据。 这样,您可以通过分配应用程序的负载来实现更大的灵活性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM