2011-03-23 60 views
2

我們需要以約100ms的間隔將一些數據寫入文件大約30分鐘,然後等待一段時間再重複一次。我們的應用程序是一個C#,.net 3.5應用程序。每次寫入的數據都很小,小於1MB。現在我們從線程池中獲取一個線程,並且每次收到新數據時(每隔大約100ms)讓該線程寫入文件。哪種方法在線程經常寫入的情況下更好?

還有另一種方法可以做到這一點,我認爲。我們可以在開始時從線程池中獲取一個線程,並在整個寫入會話期間保持該線程運行。當該線程完成寫入時,讓它等待下一個信號從共享位置獲取更新的數據並再次寫入。這種方式的缺點是我們需要對共享數據對象進行同步,以確保寫入速度較慢時不會被新數據覆蓋。那麼它可能會減慢數據從另一個系統傳輸的通信速度。

我沒有時間寫代碼來測試它們了。你認爲值得對它們進行測試嗎?或者顯然有一種方式比另一種更好?

回答

0

如果您認爲您可能有爭用寫入您的文件,那麼單個線程編寫者是一個好主意。否則,將一個操作分派給一個雜亂的線程imo並不存在真正的問題。

2

您可以使用生產者/消費者模式,因此線程可以始終鎖定文件,並且不需要打開和關閉FileStream。

下面的例子:http://www.yoda.arachsys.com/csharp/threads/deadlocks.shtml

(「更多監控方法」一節)

+0

此外,如果你在一個時間接收數據的一點,你並不需要儘快寫你獲取數據。緩衝和減少寫入次數可能更有效。 – SpaceghostAli 2011-03-23 19:34:51

相關問題