C#高效逐行讀取文本文件
在.NET C#環境中,逐行讀取文本文件是一項常見任務。本文將探討幾種不同方法,並分析其效率。
使用StreamReader.ReadLine
您當前的方法使用StreamReader.ReadLine
,緩衝區大小設置為128。然而,基準測試表明,將緩衝區大小增加到1024(默認值)或4096(NTFS簇大小)可以顯著提高性能。以下代碼片段演示了這一點:
<code class="language-csharp">const Int32 BufferSize = 128; using (var fileStream = File.OpenRead(fileName)) using (var streamReader = new StreamReader(fileStream, Encoding.UTF8, true, BufferSize)) { String line; while ((line = streamReader.ReadLine()) != null) { // 处理每一行 } }</code>
使用File.ReadLines
此方法在內部使用StreamReader
,與緩衝區大小較小的StreamReader.ReadLine
相比,性能有所提高。它使用迭代器塊,並減少了行的內存消耗。
<code class="language-csharp">var lines = File.ReadLines(fileName); foreach (var line in lines) // 处理每一行</code>
使用File.ReadAllLines
與File.ReadLines
類似,但返回一個字符串數組而不是IEnumerable<string>
。此方法需要更多內存,但允許隨機訪問行。
<code class="language-csharp">var lines = File.ReadAllLines(fileName); for (var i = 0; i < lines.Length; i++) // 处理每一行</code>
使用String.Split
雖然String.Split
很方便,但在讀取大型文件時,其速度明顯較慢,如下例所示:
<code class="language-csharp">using (var streamReader = File.OpenText(fileName)) { var lines = streamReader.ReadToEnd().Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries); foreach (var line in lines) // 处理每一行 }</code>
結論
總而言之,對於逐行讀取文本文件,File.ReadLines
因其簡單性和效率而被推薦。如果需要自定義共享選項,請考慮使用帶有適當緩衝區大小的StreamReader.ReadLine
。但是,必須進行基準測試以確定最適合您特定需求的解決方案。
以上是如何在C#中有效地逐行讀取文本文件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!