2011-01-23 4 views
3

私の状況は、データを書き出すコードがないレガシーアプリです毎秒程度のディスク。私は書いたC#プログラムを毎秒ディスクに書き込まれたものを読み込んで使用しています。データは、作成前のファイル名を知っているいくつかのテキストファイルに書き込まれます。ディスクに書き込むレガシーアプリケーションのファイルIO、およびリアルタイムで読み取るアプリケーション(.NET)

問題は、このレガシーアプリケーションと私のプログラムを実行している多くの仮想マシンがあることです。それらはramまたはcpuによって制限されませんが、ファイルioのボトルネックのためマシンあたり10個以上のVMを追加することはできません。

RAMなどに存在するファイルを簡単に作成できますか?名前付きパイプがオプションであると聞きましたか?

ありがとうございます!

+0

いつでもRAMディスクを使用できます。私はあなたがそのように質問をタグ付けしたのを見ます。それはあなたが1つを作成する方法を知りたいからですか?レガシーアプリケーションが書き込むファイルへのパスを指定できますか? –

+1

VMによって問題が発生するため、ファイルシステムのキャッシュ(メモリではなくディスク)で共有されるデータが保護されます。 * one *を使うだけです。 –

+0

レガシーアプリケーションが書き込むパスを指定することができますので、私はラムディスクを設定することができます。よりクールなものを望んでいました:-)そして、1台のVMを使用するだけでは、1台のマシンをどれくらい稼働させるかについて、レガシーアプリケーションには限界があります。 –

答えて

0

実際のIOが関係していますか?

私は非常に醜い接続を実装しました。dosプログラムからWindowsプログラムにデータを送信しました。これは、1秒に1回よりもはるかに高速でした.DOSプログラムは、何かが変更されたときはいつでも4kブロックを送信し、50回/秒(それが捕捉されていれば)Windowsプログラムはフレーム番号を読み取り、フレーム番号が異なる場合は4Kブロック。

これがありましたNOT原因ディスクIO!そこに座って、dosプログラムが望みどおりに何回もフレームを何度も更新し、ハードドライブのライトが消えてしまうことがあります。 Windowsは、ファイルが開いていて頻繁に書き込まれているのを見て、バッファーはではなく、更新が停止するまでディスクにフラッシュされていませんでした()。

リンクのWindows側を最適化するのに多くの時間を費やしていましたが、接続ではなくデータで行われたことがすべてでした。明らかに醜いもののボトルネックではありませんでした。

Windowsが毎回ファイルを閉じた場合、Windowsはこれを別の方法で処理する可能性があります。それをRAMディスクに張っておくと、それでもディスクIOをやめてしまうことはありません。

+0

ええ、ちょうど1台のマシンでもIOを食べることができます。しかし、私は15台のコンピュータをすべて同じHDDで同時に稼働させているときには少し違います。私はラムディスクを使わなければならないと思う。助言がありますか? –

+0

@nextgenneo:あなたが欠けているのは、WindowsがIOをバッファリングしたことです。最初はディスクには決して行きませんでした。 –

関連する問題