1

私はライブ データ ストリームから書き込まれるバイナリ データ ファイルを持っているので、ストリームが来るとファイルは増え続けます。その間、アプリケーション (時系列チャート) にデータを表示するには、同時に読み取り専用モードで開く必要があります。

ファイルは非常に大きい (数 100 メガバイト) ため、ファイル全体を開くには数分かかります。
私がやりたいことは、ファイル全体を x 秒ごとに再度開いたり読み取ったりするのではなく、ファイルに追加された最後のデータのみを読み取り、既に読み取られたデータに追加することです。

4

3 に答える 3

3

FileSystemWatcherを使用して、ファイルの変更を通知することをお勧めします。そこから、イベント間のファイルのサイズなどの情報をキャッシュし、フルラインにのみ応答するロジックを追加します。FileStreamクラスのSeek()メソッドを使用して、ファイル内の特定のポイントにジャンプし、読み取りを行うことができます。そこからだけ。お役に立てば幸いです。

于 2012-07-05T15:16:57.533 に答える
0

このファイルの書き込みを制御する場合は、事前定義されたサイズのいくつかのファイルに分割します。

ライターが現在のファイルがたとえば50MBより大きいと判断したら、ファイルを閉じて、すぐにデータを書き込むための新しいファイルを作成します。このデータを書き込むプロセスは、受信したデータを書き込む現在のファイルを常に認識している必要があります。

リーダースレッド/プロセスは、これらすべてのファイルを順番に読み取り、現在のファイルが完全に読み取られると次のファイルにジャンプします。

于 2012-07-05T15:15:36.820 に答える
0

ここに示す例のように、おそらく FileSystemWatcher を使用してファイルの変更を監視できます: Reading changes in a file in real-time using .NET .

ただし、RabbitMQ や Redis などのキューを含む別のソリューションを評価することをお勧めします。これは、Subscriber-Publisher モデルを持つ任意のキューです。次に、ライブデータをキューにプッシュするだけで、2 つの異なるリスナー (サブスクライバー) を持つことになります。1 つはファイルに保存し、もう 1 つは最後に追加されたデータを処理します。このようにして、アプリケーションの負荷を分散することで柔軟性を高めることができます。

于 2012-07-05T15:18:55.537 に答える