当行非常长时,大多数文本编辑器都很慢。建议的文本编辑器数据存储结构似乎是绳索,它应该不受长线修改的影响。顺便说一句,编辑器在长线内导航时甚至会很慢。
示例: 单个字符(如0在PSPad中重复100000次或在Vim中在单行上重复1000000次)会减慢光标在行尾时的移动速度。如果文件中有多少字节但在多行上调度,则光标根本不会减慢,所以我认为这不是内存问题。
这个问题的起源是如此常见?
我主要使用的是Windows,这可能与Windows字体处理有关吗?
答案 0 :(得分:12)
你可能正在使用像utf8这样的可变长度编码。编辑器希望跟踪每个光标移动时您所在的列,并且使用可变长度编码,没有快捷方式扫描每个字节以查看有多少字符;这是一个很长的扫描线。
我怀疑使用像iso8859-1(latin1)这样的单字节编码,你不会看到长线的这种减速。如果使用单字节编码,则字符长度=字节长度,并且可以使用简单的指针算法快速计算列。像ucs-2这样的固定长度多字节编码应该能够使用相同的快捷方式(只需除以常量字符大小),但编辑可能不够聪明,无法利用它。
答案 1 :(得分:1)
正如 evil otto 建议的那样,行编码可以强制重新解析行,对于长行,这会导致各种性能问题。
但不仅是编码导致重新解析行。
制表符也需要全行扫描,因为您需要解析整行以计算真实的光标位置。
某些语法突出显示定义(即块注释,引用字符串等)也需要完整的行解析。
答案 2 :(得分:1)