簡體   English   中英

如何有效地將傳入數據寫入磁盤?

[英]How can I write incoming data to disk efficiently?

我目前正在編寫一個程序,每秒鍾從一個(可能很大)的源讀取一個短字符串。 我需要能夠將這些數據寫入單獨的文件,我希望能夠以最有效的方式獲得一些指導。

我當前的實現將數據排隊,並在隊列超過特定大小時刷新數據。

有更好的方法嗎? 在C#中,是否有任何IO結構特別有效?

編輯:從大到大,我認為“合理的”最大值將是~100個數據源,但在最壞的情況下可能是幾百個。

您必須定義“大”以獲得最佳答案。 你真的不需要自己的隊列。 .NET Framework的BufferedStream非常高效

http://msdn.microsoft.com/en-us/library/3dsccbf4.aspx

http://msdn.microsoft.com/en-us/library/system.io.bufferedstream.write.aspx

如果“大”未接近操作系統允許的最大文件句柄數,則可以簡單地保持文件打開(如果其他進程在編寫時必須訪問它們,則根據需要設置共享)。 這樣可以避免每秒打開一次文件的開銷。

無論您使用何種緩沖方法,都要確保在停電或其他系統故障時,您不會緩沖比准備丟失的數據更多的數據。

如果您不能接受數據丟失,您可以立即將每個字符串寫入文件(不進行任何緩沖),而是使用帶有寫入緩存和備用電池的磁盤控制器。

UPDATE

100個數據源遠遠低於運行.Net的任何操作系統的最大打開文件數。 你應該沒問題,只需打開文件並讓它們打開,直到你完成它們為止。

有關Windows中句柄數限制的有趣讀物,請參閱

http://blogs.technet.com/b/markrussinovich/archive/2009/09/29/3283844.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM