2011-01-23 8 views
3

我的情況是我有一個遺留應用程序,我沒有寫入數據的代碼磁盤每秒鐘左右。我有一個我寫的C#程序,它每秒鐘讀取寫入磁盤的內容並使用這些數據。數據被寫入幾個文本文件,我知道它創建之前的文件名。如何減少寫入磁盤的遺留應用程序上的文件IO以及實時讀取它的應用程序(.NET)

問題是我有很多虛擬機運行這個遺留應用程序和我的程序。它們不受ram或cpu的限制,但由於文件IO瓶頸,我無法在每臺計算機上添加10個以上的虛擬機。

有沒有一種簡單的方法,我可以在磁盤上存在內存或其他東西的文件?我聽說過有關命名管道的一些選擇?

謝謝!

+0

您可以隨時使用RAM磁盤。我看到你以這種方式標記了問題。那是因爲你想知道如何創建一個?你能指定傳統應用程序寫入文件的路徑嗎? – 2011-01-23 04:40:58

+1

虛擬機導致問題,它阻止通過文件系統緩存(內存,而不是磁盤)共享數據。只需使用*一個*。 – 2011-01-23 09:57:10

回答

0

您確定實際涉及的IO?

很久以前,我實現了一個非常醜陋的連接,通過一個文件將數據從dos程序發送到Windows程序。然而,這個速度比每秒一次要快得多 - 隨着時間的推移,dos程序會發送一個4k的數據塊,每秒鐘發生50次(如果它被捕獲),Windows程序會讀取幀號,然後讀取如果幀號不同,則爲4K塊。

這樣做不是導致磁盤IO!你可以坐在那裏導致dos程序每秒更新一次幀,只要你想要的,硬盤指示燈就會熄滅。 Windows看到文件已打開且正在頻繁寫入,緩衝區被清空到磁盤NOT,直到更新停止。

雖然我花了很多時間來優化鏈接的Windows端,但是所有這些都與數據完成了,而不是連接 - 儘管這顯然是醜陋的,但它並不是瓶頸。

如果每次關閉文件,Windows都有可能以不同的方式處理它。將它粘貼在虛擬磁盤上可以防止磁盤IO即使這樣做。

相關問題