我目前正在編寫一個程序,可以從每秒鐘(可能很多)的源中讀取一個短字符串。我需要能夠將這些數據寫入單獨的文件,並且我希望能夠以最有效的方式提供一些指導。如何有效地將傳入數據寫入磁盤?
我的當前實現隊列數據,並在隊列超過特定大小時刷新它。
有沒有更好的方法?在C#中,是否有任何特別有效的IO構造?編輯:大體上,我相信「合理」的最大值將是〜100個數據源,但在最壞的情況下可能是幾百個。
我目前正在編寫一個程序,可以從每秒鐘(可能很多)的源中讀取一個短字符串。我需要能夠將這些數據寫入單獨的文件,並且我希望能夠以最有效的方式提供一些指導。如何有效地將傳入數據寫入磁盤?
我的當前實現隊列數據,並在隊列超過特定大小時刷新它。
有沒有更好的方法?在C#中,是否有任何特別有效的IO構造?編輯:大體上,我相信「合理」的最大值將是〜100個數據源,但在最壞的情況下可能是幾百個。
您必須定義「大」才能得到最佳答案。你並不需要自己的隊列。 .NET框架的BufferedStream是相當有效率
http://msdn.microsoft.com/en-us/library/3dsccbf4.aspx
http://msdn.microsoft.com/en-us/library/system.io.bufferedstream.write.aspx
如果「大」不接近的文件句柄的最大數量的OS許可,您可以只需將文件打開(設置共享作爲如果其他進程在你寫它們時必須訪問它們)。這將避免每秒打開一次文件的開銷。
確保無論您使用何種緩衝方式,都不會在發生停電或其他系統故障時緩衝更多的數據。
如果您不能接受數據丟失,您可以立即將每個字符串寫入文件(無任何緩衝),而是使用具有寫入緩存和電池備份的磁盤控制器。
UPDATE
100的數據源是遠遠低於打開文件爲運行的.Net任何操作系統的最大數量。你應該沒問題,只需打開文件並打開它們,直到完成它們。
有關在Windows處理的數量限制一個有趣的閱讀看到
http://blogs.technet.com/b/markrussinovich/archive/2009/09/29/3283844.aspx
感謝偉大的信息!很高興我不需要重新發明輪子:) – dckrooney
很高興幫助... –