- 主题:像ultraedit那种几百兆的文件秒开是怎么做到的?
关键不是文件读取,关键是视图层,不能一次性把所有的文字渲染完。
至于说读取,如果是64位系统的话,直接mmap进来随便读就行,几G的文本也没问题
【 在 woshidashu 的大作中提到: 】
: 做个假的视图。
: 先获取长度,然后根据长度划分成n份,读取第一份,再读取其他n-1份的前多少字节,拖的时候根据比例再去实时读取。
: 纯读取应该是这样吧?
: ...................
--
FROM 123.58.117.*
你估算一下渲染几个byte的字符需要多少cycle,也该明白memcpy几次,syscall几次在这个问题里完全无关紧要。
何况mmap用不好的话syscall反而更多。
【 在 marxn 的大作中提到: 】
: 你说seek也就罢了,fseek这个。。。
--
修改:ilovecpp FROM 58.37.63.*
FROM 58.37.63.*
你确定你知道fseek是干啥的?
【 在 ilovecpp 的大作中提到: 】
: 你估算一下渲染几个byte的字符需要多少cycle,也该明白memcpy几次,syscall几次在这个问题里完全无关紧要。
: 何况mmap用不好的话syscall反而更多。
--
FROM 1.203.84.*
显然,你不知道。
【 在 marxn 的大作中提到: 】
: 你确定你知道fseek是干啥的?
:
--
FROM 58.37.63.*
并没有什么方便的。场景是文本编辑器,没有随机访问。
【 在 z16166 的大作中提到: 】
: 之前有对比测试,提高不了速度。用起来方便点
--
FROM 58.37.63.*
说实话,c stdlib 我是知道 fseek 的,至于 seek 是个什么玩意儿就只有你知道了
【 在 marxn (eagle) 的大作中提到: 】
: 你确定你知道fseek是干啥的?
--
FROM 122.59.26.*
ctrl + g,跳转到指定的行
不过貌似跟楼主的主要需求关系不大了。
【 在 ilovecpp 的大作中提到: 】
: 并没有什么方便的。场景是文本编辑器,没有随机访问。
--
FROM 221.218.161.*
filemap是现代OS对文件操作的实现方式,是实际的底层操作。fseek是远古时代OS的顺序读取方式,现在是作为兼容层存在的。
你可以看看nt源代码,文件,cache,虚拟内存这些玩意底层最后都是一套代码
【 在 ilovecpp 的大作中提到: 】
: memmap就是纯扯淡,这个场景fseek一下就能慢了?
--
FROM 27.91.71.*
fseek是C stardard库,不同OS,不同编译器厂商的实现都不一样,用户甚至可以自己去实现standard library。什么时候轮到它去承担底层IO了?
【 在 eGust 的大作中提到: 】
: 说实话,c stdlib 我是知道 fseek 的,至于 seek 是个什么玩意儿就只有你知道了
:
--
FROM 114.250.18.*
第一,你跳到指定的行之后还是要读足够填满一屏的内容。
第二,特大文件要“秒开”就不会支持秒开后立即做你这个跳转。
mmap三种情况下有用:
1. 你需要在文件里跳来跳去,每次读几个字节(而不是几KB)
2. 文件内容mmap之后不用反序列化可以当作内存数据结构直接用
3. 共享内存ipc
其它地方用mmap徒增烦恼。
【 在 z16166 的大作中提到: 】
: ctrl + g,跳转到指定的行
: 不过貌似跟楼主的主要需求关系不大了。
:
--
修改:ilovecpp FROM 58.37.63.*
FROM 58.37.63.*