
同一份 100MB 的纯文本文件,VS Code 只用一两秒就打开完成了,记事本卡了一分多钟都还不见一个字。
VS Code 是用以慢著称的 Electron 框架写的,记事本是用以快著称的 C++ 写的,可为什么后者打开文件反而更慢并且还慢那么多呢?
1 wangkun025 2020-07-23 13:30:05 +08:00 占用资源多,干的事儿多。 |
2 LokiSharp 2020-07-23 13:40:04 +08:00 记事本是整个 100M 读到内存并渲染的,VSCode 是一块一块逐步读取渲染。类似的可以了解一下低速网络环境下浏览器如何加载大型 HTML 页面 |
3 Mohanson 2020-07-23 13:56:53 +08:00 via Android vscode 有官方文章介绍大文件这件事,可以搜搜看看,逐步渲染和整体渲染的区别,楼主如果是前端的话这些知识还是要掌握的,引战没意思。 |
4 lower 2020-07-23 14:00:25 +08:00 钓鱼? |
5 aoeui 2020-07-23 14:03:31 +08:00 via Android 记事本只能打开 64 KB 的内容 |
6 xJogger 2020-07-23 14:08:53 +08:00 自行车骑上就能走,最多去附近买个菜。 汽车要发动一会才能走,想跑个几十公里没啥问题。 开汽车去附近买菜大家觉得没必要,但用自行车起个几十公里,一般人也会觉得没啥必要。 |
7 yyfearth 2020-07-23 14:19:03 +08:00 这个读取超大文件本就好什么框架或者什么语言编写没关系 必须要做到按需读取部分文件和渲染来做到 记事本要完全读取文件 并且完全渲染才会显示出来 自然要慢 VSCode 和专业一些的编辑器会支持这种大文件读取 自然就不会太卡 |
8 edk24 2020-07-23 14:26:55 +08:00 记事本完整读取文件到内存 编辑器有可能是用 fopen() fread() fclose() 用偏移来读取, 不用完整读取到内存中, 只需要按偏移截取部分 这个是我的理解, 嘿嘿 |
9 koharu 2020-07-23 14:30:34 +08:00 你可以对比两个软件打开文件后拖动进度条的感受 |
10 reus 2020-07-23 15:41:30 +08:00 via Android 想不通就多学习,肤浅 |
11 luckyrayyy 2020-07-23 15:43:03 +08:00 记事本本来就不是干这个用的....c++写的就代表性能碾压一切了? |
12 maokabc 2020-07-23 15:48:51 +08:00 via Android 不是文件读取问题,读取文件那点时间差异可以忽略不计,主要在文字排版和渲染。vscode 用的数据结构是改进过的 piece table,也是一次性完全读取文件,不是编辑几 g 那种大文件没必要部分加载。 |
13 Luoboaibaicai 2020-07-23 15:56:45 +08:00 可能是该换电脑了吧 |
14 我也记得 vscode 是改进的渲染部分,读文件仍然是一次 io 全部读取的。 |
15 okjb 2020-07-23 16:06:51 +08:00 via iPhone 回楼上 这件事大家懂得都懂,不懂得,说了你也不明白,不如不说。你们也别来问我怎么了,利益牵扯太大,说了对你们也没什么好处,当不知道就行了,其余的我只能说这里面水很深,牵扯到很多大人物。详细资料你们自己找是很难找的,网上大部分已经删除干净了,所以我只能说懂得都懂,不懂得也没办法。 |
16 stevenhawking 2020-07-23 16:11:29 +08:00 vscode 是测算你一屏幕会阅读到哪一段落,只读取和渲染那一段落; notepad 是哪怕是个蓝光 avi 也要全部读取 |
18 gainsurier 2020-07-23 16:27:43 +08:00 最快的还是 emeditor,十几 G 的文件轻松读取。 |
19 wangkun025 2020-07-23 16:30:45 +08:00 @gainsurier 比 sublime 厉害吗? |
20 wee911 2020-07-23 16:37:42 +08:00 vscode 很多都是 c++写的,就视图用了下 electron |
21 SpiderZzx 2020-07-23 16:41:15 +08:00 还记得小时候网速慢看那种颜色网站图片和网页都是一点一点慢慢加载出来的 |
22 zdnyp 2020-07-23 17:37:01 +08:00 好重的的戾气... |
23 gitopen 2020-07-23 18:20:22 +08:00 打开 GB 级别的 txt,mac 上,速度 UltraEdit > sublime > vscode |
25 ysc3839 2020-07-23 18:30:00 +08:00 via Android 印象中记事本是把文件映射到内存,再把指针传给 Edit 控件。而 Edit 控件会读取全部数据,不会分段读取。 具体情况如何还得逆向以及看看 ReactOS 的实现。 |
26 imn1 2020-07-23 18:46:13 +08:00 vscode 是异步读取的吧? |
28 qW7bo2FbzbC0 2020-07-23 19:30:18 +08:00 @aoeui 什么意思? |
29 liuzhiyong 2020-07-23 19:49:11 +08:00 你用 UltraEdit 试试:记事本和 VSCode 不是一个级别的工具。 |
30 cheng6563 2020-07-23 19:53:40 +08:00 via Android windows 原生的古董控件是这样的。 |
31 GrayXu 2020-07-23 19:58:30 +08:00 via Android 自己想想如果自己写一个读大文件的,会怎么写,就知道他们的区别了 |
32 stephenyin 2020-07-23 20:08:20 +08:00 内存映射了解一下 |
33 laqow 2020-07-23 20:40:26 +08:00 via Android C++什么时候快过? |
34 xiaoming1992 2020-07-24 00:14:01 +08:00 via Android @jrtzxh020 一看就不怎么逛 b 乎。。。 |
35 daozhihun 2020-07-24 10:20:21 +08:00 sublime 打开大文件貌似更快 记得以前有个微软的人说他们也很惊讶 sublime 为什么能那么快 |
36 lonewolfakela 2020-07-24 11:04:35 +08:00 记事本可以正确显示各种奇葩文字,横着的竖着的叠着的左右横跳的……相比之下 vscode 弄了快四年都弄不好 RTL (由右至左的文字)支持( https://github.com/microsoft/vscode/issues/11770 )。 然而 vscode 作为代码编辑器,主要还是把 ASCII 码文字正确显示就能完成其主要功能了。而记事本作为一个系统的默认的基本文本编辑器,用户会用它来查看各种各样的语言和内容的文档,所以支持各种语言都是有必要的。 所以记事本速度慢实在是很正常的事情,毕竟要支持这些奇怪的东西都是有代价的。 |
37 mostkia 2020-07-24 11:27:35 +08:00 记事本是将整个文件读取到内存的,并且修改也是刷新整个内存数据的,你打开一个 10M 的文档,可以试着在开头插入一个字符串,看看计算机是不是会卡死一段时间 |
38 codehz 2020-07-24 13:01:19 +08:00 @lonewolfakela #36 然后记事本还是不支持彩色 emoji... 这玩意就是 edittext 控件的试验场,哪里来的这么多操作。 |
39 momo1999 2020-07-24 14:19:15 +08:00 记事本没优化 |