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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在.NET中讀取大型(1 GB)txt文件?

如何在.NET中讀取大型(1 GB)txt文件?

C#
蕪湖不蕪 2019-09-02 16:17:15
我有一個1 GB的文本文件,我需要逐行閱讀。最好和最快的方法是什么?private void ReadTxtFile(){                string filePath = string.Empty;    filePath = openFileDialog1.FileName;    if (string.IsNullOrEmpty(filePath))    {        using (StreamReader sr = new StreamReader(filePath))        {            String line;            while ((line = sr.ReadLine()) != null)            {                FormatData(line);                                    }        }    }}在FormatData()我檢查必須與單詞匹配的行的起始單詞,并根據(jù)該增量一個整數(shù)變量。void FormatData(string line){    if (line.StartWith(word))    {        globalIntVariable++;    }}
查看完整描述

3 回答

?
四季花海

TA貢獻1811條經(jīng)驗 獲得超5個贊

如果您使用的是.NET 4.0,請嘗試使用 MemoryMappedFile,它是此方案的設(shè)計類。

你可以使用StreamReader.ReadLine否則。


查看完整回答
反對 回復 2019-09-02
?
撒科打諢

TA貢獻1934條經(jīng)驗 獲得超2個贊

使用StreamReader可能是一種方法,因為您不希望一次將整個文件放在內(nèi)存中。MemoryMappedFile比隨機讀取更適合隨機訪問(順序讀取速度快10倍,內(nèi)存映射速度是隨機訪問速度的十倍)。


您也可以嘗試從FileOptions設(shè)置為SequentialScan的文件流中創(chuàng)建您的streamreader(請參閱FileOptions枚舉),但我懷疑它會產(chǎn)生很大的不同。


但是,有一些方法可以使您的示例更有效,因為您在與閱讀相同的循環(huán)中進行格式化。你正在浪費時鐘周期,所以如果你想要更高的性能,那么使用多線程異步解決方案會更好,其中一個線程讀取數(shù)據(jù)而另一個線程在可用時對其進行格式化。Checkout BlockingColletion可能符合您的需求:


阻止收集和生產(chǎn)者 - 消費者問題


如果你想要盡可能快的性能,根據(jù)我的經(jīng)驗,唯一的方法是順序讀入一大塊二進制數(shù)據(jù)并將其反序列化為文本并行,但代碼在這一點上開始變得復雜。


查看完整回答
反對 回復 2019-09-02
?
米脂

TA貢獻1836條經(jīng)驗 獲得超3個贊

您可以使用LINQ:


int result = File.ReadLines(filePath).Count(line => line.StartsWith(word));

File.ReadLines返回一個IEnumerable <String>,懶惰地從文件中讀取每一行而不將整個文件加載到內(nèi)存中。


Enumerable.Count計算以單詞開頭的行。


如果從UI線程調(diào)用此方法,請使用BackgroundWorker。


查看完整回答
反對 回復 2019-09-02
  • 3 回答
  • 0 關(guān)注
  • 568 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

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