我正在为大型文档开发.NET文本的"文字处理器"控件 - 打印时大到10000页.
几年前我用Win32实现了这个功能,使用数组来保存行指针,根据需要在块中增长数组,并调用RtlMoveMemory(kernel32.dll)来移动指针.
主要的性能问题是
- 文档从第1行到最后按顺序加载...
- 鼠标移动需要通过其从文档顶部偏移的"像素"来找到一条线来调整鼠标光标.
- 绘画需要通过其偏移找到一条线并迭代下一行
- 插入和删除不得超过年龄(自动换行)
我已经阅读了很多关于
- SortedList:加载超快,但插入怎么样?
- SplayTree:听起来不错,因为用户将鼠标移动到同一行很多,但是从文档的底部滚动到中间呢?
- SkipList:听起来像一个好的整体表演者,但有高数据量的内存问题?
- SortedDictionary和AVL树:在加载顺序慢的情况下被取消资格.
- RedBlack Tree:无处不在,但最糟糕的是什么?这是最好的选择吗?
这些结构是否具有百万条目的良好性能?如果是这样,最好的选择是什么?
我可能错过了其他想法/课程.
我希望尽可能坚持托管代码,但如果需要,我准备切换到脏代码.