algorithm - 为什么文本编辑器在编辑很长的行时速度很慢?

标签 algorithm text-editor

大多数文本编辑器在行很长时速度很慢。建议的文本编辑器数据存储结构似乎是绳索,它应该不受长行修改的影响。顺便说一句,编辑器在长行内简单导航时甚至会很慢。

例子: 像 0 这样的单个字符在 PSPad 中重复 100000 次或在 Vim 中在一行中重复 1000000 次,当您位于行尾时,光标移动速度会变慢。如果文件中有尽可能多的字节但在多行上分派(dispatch),则光标根本不会减慢,所以我认为这不是内存问题。

这个如此普遍的问题的根源是什么?

我主要使用 Windows,所以这可能与 Windows 字体处理有关?

最佳答案

您可能正在使用像 utf8 这样的可变长度编码。编辑器希望通过每次光标移动来跟踪您所在的列,并且使用可变长度编码没有扫描每个字节以查看有多少字符的捷径;有很多扫描的长线。

我怀疑您不会在使用像 iso8859-1 (latin1) 这样的单字节编码的长行时看到这种减速。如果您使用单字节编码,则字符长度 = 字节长度,并且可以使用简单的指针算法快速计算列。像 ucs-2 这样的固定长度多字节编码应该能够使用相同的快捷方式(仅除以恒定字符大小),但编辑器可能不够聪明,无法利用这一点。

关于algorithm - 为什么文本编辑器在编辑很长的行时速度很慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7388916/

相关文章:

algorithm - 如何在不使用 "/"和 "%"的情况下有效地获得商和余数?

emacs - Emacs 会让我成为更好的程序员吗?

java - 动态简单文本编辑器 Java

text-editor - TextMate 有什么了不起?

java - IntelliJ IDEA 多行编辑方式

python - 平滑着色算法

algorithm - 为什么主成分分析给我截然不同的结果?

java - 选择两个大小相等的不相交子数组 A 和 B,使总和最大化 (A_1*B_k + A_2*B_(k-1) ... + A_k*B_1),k = |A| = |乙|

确定井字游戏结束的算法

f# - 有没有好的 F# 文本编辑器?