C#讀取大文件

有些時候須要讀取文件,小文件的時候效率的影響能夠忽略,可是當文件上M,上G的時候,這個時候,效率問題就很是重要了,下面將對一個3G的文件,用C#的方式讀取,對比效率的影響。git

1. FileStream對象表示在磁盤或網絡路徑上指向文件的流,操做的是字節和字節數組,能夠用於任何數據文件,而不單單是文本文件,也能夠讀取相似圖像和聲音的文件
2. BufferedStream類主要用來處理流數據的,減小某些流直接操做存儲設備的時間,提升讀寫效率,也能夠讀取字節,當讀取文件的時候,用字節讀取有可能會把字符分開,最後轉換而成的字符可能就有問題。
3. StreamReader,StreamWriter 類操做的是字符數據,通常用於讀寫文件數組

#FileMode
1. Create:建立新文件;若是存在這樣的文件,將重寫
2. CreateNew:建立新文件,可是若是已經存在此文件,則拋出異常
3. Open:打開現有的文件,可是不存在所指定的文件,則拋出異常
4. OpenOrCreate:若是文件存在,則規定打開文件,不然就建立新文件
5. Truncate:打開現有文件,清除其內容
6. Append:若是文件存在,就打開文件,將文件位置移動到文件的末尾,不然建立一個新文件。服務器

如下代碼是在.net core環境下運行的網絡

Stopwatch watch = new Stopwatch();
watch.Restart();
using (StreamWriter newFile = new StreamWriter(@"D:\gitPublic\NetFrameTest\NetFrameTest\NetCore\big4.txt")) using (StreamReader reader = new StreamReader(@"D:\gitPublic\NetFrameTest\NetFrameTest\NetCore\test.txt")) { string line; while ((line = reader.ReadLine()) != null) { newFile.WriteLine(line); } } watch.Stop(); Console.WriteLine($"StreamReader StreamWriter 程序運行花費的時間:{(double)watch.ElapsedMilliseconds / 1000:0.000} secs"); watch.Restart(); int length = 2048; byte[] array = new byte[length]; int bytesRead = 0; using (FileStream fileStream = new FileStream(@"D:\gitPublic\NetFrameTest\NetFrameTest\NetCore\test.txt", FileMode.Open)) using (FileStream newFile = new FileStream(@"D:\gitPublic\NetFrameTest\NetFrameTest\NetCore\test5.txt", FileMode.Create)) using (BufferedStream bufferedStream = new BufferedStream(fileStream)) { while ((bytesRead = bufferedStream.Read(array, 0, length)) > 0) { if (bytesRead == length) newFile.Write(array); else newFile.Write(array, 0, bytesRead); } } watch.Stop(); Console.WriteLine($"BufferedStream FileStream 程序運行花費的時間:{(double)watch.ElapsedMilliseconds / 1000:0.000} secs"); watch.Restart(); using (FileStream fileStream = new FileStream(@"D:\gitPublic\NetFrameTest\NetFrameTest\NetCore\test.txt", FileMode.Open)) using (StreamWriter newFile = new StreamWriter(@"D:\gitPublic\NetFrameTest\NetFrameTest\NetCore\test6.txt")) using (BufferedStream bufferedStream = new BufferedStream(fileStream)) using (StreamReader reader = new StreamReader(fileStream)) { string line; while ((line = reader.ReadLine()) != null) { newFile.WriteLine(line); } } watch.Stop(); Console.WriteLine($"StreamReader StreamWriter(結合BufferedStream) 程序運行花費的時間:{(double)watch.ElapsedMilliseconds / 1000:0.000} secs");

沒有讀寫文件的計算機性能性能

讀寫文件的時候計算機性能spa

當讀寫文件的時候,CPU和磁盤使用率提升,若是服務器常常讀寫文件的話,須要好的CPU和硬盤.net

3G的文件讀寫運行效率對比pwa

小文件運行效率對比code

對比以上結果,讀取字節效率最高,增長BufferedStream的時候效率要比不增長的時候快對象

相關文章
相關標籤/搜索