為什麼Windows系統自帶的記事本(notepad.exe)程序打開大文件這麼慢?

使用「記事本」打開1-10MB文本的過程非常緩慢,即使是在I/O性能較好的平台上依然如此。

(補充:系統運行在Sandisk Extreme Pro 480GB單盤上,AS SSD Benchmark得分1000+)

1.是怎樣的演算法導致了這樣的結果?

2.通過怎樣的設計可以改善這一結果?

3.為什麼這一問題沒有跟隨Windows的迭代得到解決?


我個人折騰過10+的文本編輯器。個人覺得,對於大文件,大多數的文本編輯器都沒有太好的方式。如果要說最好的。我個人推薦emeditor。這是我覺得目前在打開大文件方面。做的最好的一個文本編輯器。雖然不可能是秒開。但是開一個4G的資料庫log文件不死。我就非常開心了。

雖然沒有詳細的研究,但是按照常理,打開大文件需要大內存。但是由於文本編輯器本什麼的定位。他不會申請巨大的內存。這樣一來,打開大文件自然就不會很快。而且,為了保證打開大文件,文本編輯器還要再追加額外的代碼的話,恐怕也不經濟。

emeditor能快速打開大文件,一方面得益於他獎金5m的體積。(notepad我記得還不到200k)另一方面,emeditor在打開大文件的時候,專門做過區塊優化。可以保證在某一個塊兒區域內操作的流暢。如果要讓notepad來做這些事情。恐怕也是強人所難。

我們一直都說,專門的事情要讓專門的人才去做。軟體也是同樣。記事本本來設計的時候,就只是一個txt的查看工具。只不過後來隨著演變。才慢慢的有了各種各樣的用法。但是本質上。他只是微軟設計出來的一個文本編輯器而已。

從商業的角度來說,指望微軟為一個只有1%的用戶需求而專門開發或者改進一個功能。而要承擔被99%用戶罵的風險,他們當然不幹。

所以這也是為什麼市場有如此多的文本編輯器的原因。

安利了emeditor,最後還要安利一個everedit。國人作品。個人覺得在品質上已經足以同notepad++之流抗衡。在打開速度,內存使用率上,都超過notepad++。是我目前最常用的文本編輯器之一。

最後還要安利一下sublime text。這是我在Windows平台上用過的最好的文本編輯器。唯一讓我不爽的就是,對於亞洲字體支持極差。

利益相關 emeditor 終身用戶。everedit 終身用戶 sublime text2 付費用戶


時間花在排版上了。

打開大文件快的編輯器,排版複雜文種和 RTL 我就沒見過對的……


Comparison of text editors

可以看下Large File Support那一列


1、拋棄XP

2、關掉自動換行

你就會發現變快了很多。當然秒開還是沒有。


快慢是相對的,你用了不趁手的工具,和為你的任務專門設計的工具比較起來當然慢。記事本就不是用來解決你的問題的。

NotePad的設計是儘可能地少佔內存(很多人同時運行很多個NotePad實例)。Windows 95和98裡面,你打開超過64k的文本文件系統都會提示你改用寫字板打開。對於大多數NotePad用戶來說,打開大文件並非必須,為此寫判斷邏輯都是在浪費他們的CPU時間。打個比方,記事本相對於其他文本編輯器,相當於步行相對於其他交通工具。正常人出行根據遠近都知道選擇不同的交通工具,怎麼編輯個大文本就只知道用記事本?


應該是全部載入後打開,其他應用是先載入一部分


因為它並不考慮用來打開這麼大的文件。

你搞個小皮卡去拉10噸貨也是拉不動的

正確答案見 @蔣晟 的回答


因為自帶的記事本是讀取整個txt文件的,所以txt越大讀取越慢。

其他的文本編輯器都是只讀取第一頁,所以速度快很多。


引用@蔣晟的答案:

因為NotePad的設計是儘可能地少佔內存(很多人同時運行很多個NotePad實例)。Windows 95和98裡面,你打開超過64k的文本文件系統都會提示你改用寫字板打開。對於大多數NotePad用戶來說,打開大文件並非必須,為此寫判斷邏輯都是浪費他們的CPU時間。

這個問題在高版本的windows 操作系統中已經有很大的改善,在xp及更早的版本中,我一般用word打開大文本。


自動換行,一托即卡


推薦閱讀:

有沒有什麼演算法可以確定兩圖是否同構?
N個數最少比較多少次才能保證知道大小順序?
演算法要怎麼學好?
類似git/linux的文件對比功能(diff)是怎麼實現的?

TAG:MicrosoftWindows | 演算法 | 編程 | CC | Windows記事本 |