簡體   English   中英

對流作家的基本了解

[英]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操作以將文件指針定位到文件末尾。 這是操作系統支持的,不需要讀取或寫入任何文件數據。

然后關閉手柄

當您調用CloseDispose時,手柄將關閉。 兩者是等效的。 (為方便起見,請注意,您可以利用C# using語句創建作用域,在此作用域中,對Dispose的調用由編譯器在退出作用域時進行處理。)

每半秒鍾到一個文件

聽起來不夠頻繁,無法以100%的速度加載計算機。 特別是由於磁盤I / O主要由在磁盤上等待組成,這種等待不會增加CPU使用率。 使用探查器查看您的應用程序在哪里花費時間。 另外,您可以嘗試的一種簡單方法是在調試器下運行,單擊“暫停”,然后檢查線程的調用堆棧。 當您隨機暫停應用程序時,很有可能將一個耗時的方法放在堆棧上。

您上面提供的代碼將覆蓋文件的內容,因此不需要預先加載文件。
但是,您可以通過以下方式附加到文件:

StreamWriter writer = new StreamWriter(@"C:\TEST.XML", true);

true參數是告訴它附加到文件中。
而且,在追加到文件之前,它不會將整個文件加載到內存中。
這就是所謂的“流”的意思,這意味着如果您采用一種方式,那么您將采用一種方式。

暫無
暫無

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

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