2017-03-06 16 views
-1

請參閱我在示例代碼的註釋問題:C#中的流式讀寫器如何工作?

var fileStream = file.OpenStreamForReadAsync(); // [1]: Is the file stored in memory 
               // when opened as stream? 
var reader = new StreamReader(fileStream); 
string line; 
while(!reader.EndOfStream) 
{ 
    line = await reader.ReadLineAsync(); // [2]: If answer of [1] is "no", how the reader 
             // works when reading a line, does it read from 
             // disk everytime? 
    ... 
} 

而且同樣的問題對於一個StreamWriter,寫一行時,它直接寫入磁盤,或暫時記憶?

+0

我不明白你在問關於Stream Reader的問題。 – EJoshuaS

+0

你永遠不會直接寫入文件,始終寫入內存。但是這是操作系統提供的抽象,它使文件寫入非常有效。數據在後臺懶洋洋地寫入磁盤。你的程序不知道這是實際發生的事情。針對UWP,這些寫入實際上不會寫入您打開的文件。直到你關閉流。這可以防止您因程序崩潰或磁盤空間不足而意外毀壞文件。你的程序不知道這是實際發生的事情。這個信息不會讓你有任何不同的代碼。 –

+0

[StreamReader.Read()]上的[MSDN頁面(https://msdn.microsoft.com/en-us/library/ath1fht8(v = vs.110).aspx#Anchor_2)提到了一個緩衝區,所以我猜測它隨着時間而緩衝。 –

回答

0

StreamWriter使用緩衝區。當您明確地清除它時,它在其using區塊的結尾,或者當您在該流上呼叫CloseDispose時,它會刷新到光盤。您也可以將其設置爲自動刷新。

在閱讀方面,它會做什麼其他每次都從光盤讀取?你會得到一個結果,不是嗎?如果沒有真正進行光盤讀取,它會如何得出結果?

+0

感謝您的回答,對於StreamReader,我的意思是當它讀取一行時,它是否從磁盤讀取一行,或者當我以流的形式打開文件時,文件內容的一部分已經存儲在內存中(如緩衝區)? – sudoer

+0

@sudoer它沒有任何意義,因爲它不提前知道你要讀取多少文件。 – EJoshuaS

相關問題