[英]basic understanding of stream writer
嗨,
我的問題與對使用StreamWriter寫入數據的基本了解有關。 如果考慮以下代碼:
StreamWriter writer = new StreamWriter(@"C:\TEST.XML");
writer.WriteLine("somestring");
writer.Flush();
writer.Close();
使用文件名初始化writer對象時,它所具有的只是指向文件的指針。
但是,當我們將任何字符串寫入writer對象時,它實際上是否加載整個文件,讀取其內容,將字符串追加到末尾然后關閉句柄?
我希望這不是一個愚蠢的問題。 我之所以這么問是因為,我遇到了一個應用程序,該應用程序可能經常每半秒寫入一次文件,並且文件大小增加到大約1 GB,並且仍然繼續寫入文件。 (正在記錄)
您是否認為這可能導致100%的CPU使用率?
如果我的問題不清楚,請告訴我?
提前致謝。
它實際上是否加載整個文件,讀取其內容
框架打開文件后,它將執行FileStream.Seek
操作以將文件指針定位到文件末尾。 這是操作系統支持的,不需要讀取或寫入任何文件數據。
然后關閉手柄
當您調用Close
或Dispose
時,手柄將關閉。 兩者是等效的。 (為方便起見,請注意,您可以利用C# using
語句創建作用域,在此作用域中,對Dispose
的調用由編譯器在退出作用域時進行處理。)
每半秒鍾到一個文件
聽起來不夠頻繁,無法以100%的速度加載計算機。 特別是由於磁盤I / O主要由在磁盤上等待組成,這種等待不會增加CPU使用率。 使用探查器查看您的應用程序在哪里花費時間。 另外,您可以嘗試的一種簡單方法是在調試器下運行,單擊“暫停”,然后檢查線程的調用堆棧。 當您隨機暫停應用程序時,很有可能將一個耗時的方法放在堆棧上。
您上面提供的代碼將覆蓋文件的內容,因此不需要預先加載文件。
但是,您可以通過以下方式附加到文件:
StreamWriter writer = new StreamWriter(@"C:\TEST.XML", true);
true
參數是告訴它附加到文件中。
而且,在追加到文件之前,它不會將整個文件加載到內存中。
這就是所謂的“流”的意思,這意味着如果您采用一種方式,那么您將采用一種方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.