【发布时间】:2009-03-29 05:18:51
【问题描述】:
许多十六进制编辑器,例如 Hex Workshop,甚至可以读取大型文件,同时保持相对较小的内存占用,但仍能保持滚动流畅。我正在寻找实现这一目标的最佳方法,因此我有几个相关的问题。
我应该只使用 FileStream 吗?
- 它的缓冲是否基于当前的 Seek 位置? (向后滚动时通常会出现页面错误吗?)
- 如果我为 FileStream 创建一个仅在内部使用 Seek 的包装器,我会损害 FileStream 正确缓冲的能力吗? (即,即使搜索就在附近,重复搜索也会大大降低性能吗?我可以依靠缓冲算法或磁盘调度程序来保持性能吗?)
使用内存映射 I/O 会更好吗? (我只希望文件最大可能为 100MB)
- 来自搜索/跳转/快速滚动的页面错误会造成明显的性能问题吗?
最终必须显示数据。我应该将整个文件呈现为位图并在更改时使图像的某些部分无效(让滚动控件在图像上进行自己的分页),还是应该只在滚动事件上生成当前显示区域?
所以简而言之,我是分页数据、生成的图像还是两者都分页,还是根据需要获取/生成它们?最适合此任务的 (WPF/.Net) 库/API 对象是什么?
【问题讨论】:
标签: .net file file-io scroll memory-mapped-files