8

我正在为大型文档开发 .NET 版本的“文字处理器”控件 - 大意味着打印时最多 10000 页。

几年前,我用 Win32 实现了该功能,使用数组来保存行指针,根据需要以块的形式增长数组并调用 RtlMoveMemory (kernel32.dll) 来移动指针。

主要的性能问题是

  • 文档按从第 1 行到最后一行的顺序加载...
  • 鼠标移动需要通过它从文档顶部的“像素”偏移量找到一条线来调整鼠标光标。
  • 绘画需要通过它的偏移量找到一条线并遍历下一行
  • 插入和删除不能花费时间(自动换行)

我读过很多关于

  • SortedList:加载速度非常快,但是插入呢?
  • SplayTree:听起来不错,因为用户在同一行上移动了很多鼠标,但是从文档的底部滚动到中间呢?
  • SkipList:听起来整体表现不错,但数据量大时存在内存问题?
  • SortedDictionary 和 AVL 树:因加载缓慢而被取消资格。
  • 红黑树:没有最好的,但没有最差的?这是最好的选择吗?

这些结构是否能够在一百万个条目中表现良好?如果是这样,最好的选择是什么?

我可能错过了其他想法/课程。

如果可能,我想坚持使用托管代码,但如果需要,我准备切换到脏代码。

4

0 回答 0