使用 LINQ 進行高階檔案讀取
假設我們有兩個文字文件,其中每一行代表一個要處理的單獨元素。我們的目標是探索使用 C# 逐行讀取這些檔案的高效且可讀的方法。
目前方法
目前,我們使用 StreamReader 單獨讀取每一行。雖然此方法很簡單,但對於較大的檔案或需要選擇特定行時,它可能會變得低效。
利用LINQ
LINQ 提供了一個強大的方法來解決此問題問題:
static IEnumerable<SomeType> ReadFrom(string file) { string line; using(var reader = File.OpenText(file)) { while((line = reader.ReadLine()) != null) { SomeType newRecord = /* parse line */ yield return newRecord; } } }
此方法使用迭代器區塊來實作惰性行讀取器。透過使用yield關鍵字,它一次傳回一筆記錄,而無需緩衝整個檔案。
增強靈活性
為了解決記憶體消耗問題,我們可以修改程式碼略:
static IEnumerable<string> ReadFrom(string file) { string line; using(var reader = File.OpenText(file)) { while((line = reader.ReadLine()) != null) { yield return line; } } }
現在,這個方法回傳一個沒有緩衝的字串序列。然後,我們可以使用像Where和Select這樣的LINQ運算子來根據需要過濾和處理行。
... var typedSequence = from line in ReadFrom(path) let record = ParseLine(line) where record.Active // for example select record.Key;
此程式碼使用ReadFrom方法建立延遲計算的序列,使我們能夠執行複雜的操作,而無需持有整個檔案都在記憶體中。
結論
透過利用 LINQ,我們可以顯著地改善我們的檔案讀取程式碼的效率和可讀性。惰性求值方法避免了不必要的記憶體消耗,使其成為處理大檔案或選擇特定行的理想選擇。
以上是C# 讀取大型文字檔案時,LINQ 如何提高效率和可讀性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!