第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

讀取文本文件的最快方法是什么?

讀取文本文件的最快方法是什么?

慕容3067478 2019-06-21 17:22:55
讀取文本文件的最快方法是什么?我想逐行讀取文本文件。我想知道我是否在.NET C#范圍內(nèi)盡可能高效地完成這個(gè)任務(wù)。這就是我目前正在嘗試的:var filestream = new System.IO.FileStream(textFilePath,               System.IO.FileMode.Open,               System.IO.FileAccess.Read,               System.IO.FileShare.ReadWrite);var file = new System.IO.StreamReader(filestream, System.Text.Encoding.UTF8, true, 128);               while ((lineOfText = file.ReadLine()) != null){     //Do something with the lineOfText}
查看完整描述

3 回答

?
開(kāi)心每一天1111

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超13個(gè)贊

要想找到最快的逐行讀取文件的方法,您必須做一些基準(zhǔn)測(cè)試。我在我的電腦上做了一些小測(cè)試,但你不能指望我的結(jié)果適用于你的環(huán)境。

使用StreamReader.Readline

這基本上是你的方法。由于某些原因,您將緩沖區(qū)大小設(shè)置為最小的可能值(128)。增加這一點(diǎn)通常會(huì)提高性能。默認(rèn)大小是1,024,其他好的選擇是512(Windows中的扇區(qū)大小)或4,096(NTFS中的集群大小)。您必須運(yùn)行一個(gè)基準(zhǔn)測(cè)試來(lái)確定最佳緩沖區(qū)大小。更大的緩沖區(qū)-如果不是更快-至少不會(huì)比較小的緩沖區(qū)慢。

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)
      // Process line
  }

這個(gè)FileStream構(gòu)造函數(shù)允許您指定文件選擇..例如,如果您從頭到尾依次讀取一個(gè)大文件,則可以從FileOptions.SequentialScan..再一次,基準(zhǔn)是你能做的最好的事情。

使用File.Readline

這非常類(lèi)似于您自己的解決方案,只是它是使用StreamReader固定緩沖區(qū)大小為1,024。在我的計(jì)算機(jī)上,這與緩沖區(qū)大小為128的代碼相比,性能略有提高。但是,通過(guò)使用更大的緩沖區(qū)大小,您可以獲得相同的性能提升。此方法使用迭代器塊實(shí)現(xiàn),不占用所有行的內(nèi)存。

var lines = File.ReadLines(fileName);foreach (var line in lines)
  // Process line

使用File.ReadAllline

這與前面的方法非常相似,只是該方法會(huì)生成用于創(chuàng)建返回的行數(shù)組的字符串列表,因此內(nèi)存需求更高。但是,它會(huì)返回String[]而不是IEnumerable<String>允許你隨機(jī)進(jìn)入線路。

var lines = File.ReadAllLines(fileName);for (var i = 0; i < lines.Length; i += 1) {
  var line = lines[i];
  // Process line}

使用String.plit

這種方法要慢得多,至少在大文件上(在511 KB文件上進(jìn)行了測(cè)試),這可能是由于String.Split已實(shí)現(xiàn)。它還為所有行分配一個(gè)數(shù)組,與解決方案相比,增加了所需的內(nèi)存。

using (var streamReader = File.OpenText(fileName)) {
  var lines = streamReader.ReadToEnd().Split("\r\n".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
  foreach (var line in lines)
    // Process line}

我的建議是使用File.ReadLines因?yàn)樗蓛舾咝?。如果需要特殊的共享選項(xiàng)(例如,使用FileShare.ReadWrite),您可以使用自己的代碼,但應(yīng)該增加緩沖區(qū)大小。


查看完整回答
反對(duì) 回復(fù) 2019-06-21
  • 3 回答
  • 0 關(guān)注
  • 877 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)