亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

使用BufferedReader讀取大型文本文件,打印每行的速度有多慢?

使用BufferedReader讀取大型文本文件,打印每行的速度有多慢?

小怪獸愛吃肉 2022-09-01 19:54:17
我創建了一個程序來讀取一個非常大的文本文件(2.5 GB),并將每行重寫為一個新的文本文件,格式符合我的要求。一切都很順利,但是當我寫它時,我放了一個小的“println”,它讀取行用于測試目的,看看它是否正常工作。一切都很順利,所以我啟動了它,離開了計算機,3小時后回來,看到我在那里留下了調試消息。我的問題是,如果我讀/寫大約46,000,000行,這會讓我放慢速度嗎?將它阻止到這么遠以將其刪除是明智的嗎?
查看完整描述

3 回答

?
慕勒3428872

TA貢獻1848條經驗 獲得超6個贊

好吧,我猜這大約會使ETA翻倍,因為您基本上在日志中創建文件的另一個副本;-)

檢查你已經走了多遠 - 然后考慮殺死這個過程....


查看完整回答
反對 回復 2022-09-01
?
飲歌長嘯

TA貢獻1951條經驗 獲得超3個贊

整個過程有兩件事負責 -

  1. 中央處理器

  2. IO 設備

最初,當您將行從一個文件復制到另一個文件時,該過程不涉及 IO 設備(因為您沒有打印任何行)。因此,CPU沒有等待時間。因此,該過程在更短的時間內完成。

當您引入 println 語句時,對于 CPU 從第一個文件讀取的每一行,它必須將該行發送到 IO 設備進行打印。將線路發送到 IO 設備后,CPU 必須等待它完成作業。IO 設備完成打印后,CPU 將繼續該過程并將該行粘貼到第二個文件中。此過程將繼續,直到第一個文件中的所有行都復制到第二個文件。

因此,對于文件中的每一行,CPU必須等待一定的時間。這是處理時間增加的第一個原因。其次,IO 打印會創建文件的另一個副本。因此,現在您正在創建 2 個副本而不是一個副本。

46,000,000 行?

Let's take the time taken by each operation in the process is 1 microsecond.Initially - 


Time took by CPU to copy a line = 1 microsecond

Time took by CPU to paste a line = 1 microsecond

Total time for copying 46,000,000 lines = 46,000,000 microsecond = 46 sec

Total time for pasting 46,000,000 lines = 46,000,000 microsecond = 46 sec

Total time of the entire process = 92 sec.

普印本介紹


Time took by CPU to copy a line = 1 microsecond

Time took by IO to paste a line = 1 microsecond

Time took by CPU to paste a line = 1 microsecond

Waiting time of CPU for every line = 1 microsecond


Total time taken by CPU for copying 46,000,000 lines = 46,000,000 microsecond = 46 sec

Total time taken by IO for copying 46,000,000 lines = 46,000,000 microsecond = 46 sec

Waiting time of CPU = 46,000,000 microsecond = 46 sec

Total time by CPU for pasting 46,000,000 lines = 46,000,000 microsecond = 46 sec


Total time of the entire process = 184 sec.


查看完整回答
反對 回復 2022-09-01
?
函數式編程

TA貢獻1807條經驗 獲得超9個贊

“調試”的額外成本非常依賴于平臺。println


如果將 您路由到控制臺,則可能會因與控制臺相關的額外處理而減慢速度。在Windows上默認控制臺非常慢,在Linux上是如此之多。PrintStream


此外,如果您正在使用/,您將配置為在每次添加額外開銷后沖洗。System.outSystem.errPrintStreamprintln


3小時處理2.5 GiB的磁盤是非常慢的。因此,要么你的代碼是復雜的,額外的調試行對整體性能的影響很小,要么你是在Windows上寫入默認控制臺(在以后的情況下,調試是一個巨大的問題)。println


查看完整回答
反對 回復 2022-09-01
  • 3 回答
  • 0 關注
  • 188 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號