2

许多十六进制编辑器,例如 Hex Workshop,甚至可以读取大型文件,同时保持相对较小的内存占用,但仍能保持滚动流畅。我正在寻找实现这一目标的最佳方法,因此我有几个相关的问题。

我应该只使用 FileStream 吗?
  - 它的缓冲是否基于当前的 Seek 位置?(向后滚动时通常会出现页面错误吗?)
  - 如果我为 FileStream 创建一个仅在内部使用 Seek 的包装器,我会损害 FileStream 正确缓冲的能力吗?(即,即使搜索就在附近,重复搜索也会严重影响性能吗?我可以依靠缓冲算法或磁盘调度程序来保持性能吗?)

使用内存映射 I/O 会更好吗?(我真的只希望文件最多 100MB)
  - 来自搜索/跳转/快速滚动的页面错误会产生明显的性能问题吗?

最终必须显示数据。我应该将整个文件渲染为位图并在更改时使图像的某些部分无效(让滚动控件在图像上进行自己的分页),还是应该只在滚动事件上生成当前显示区域?

所以简而言之,我是分页数据、生成的图像,还是两者都分页,还是根据需要获取/生成它们?最适合此任务的(WPF/.Net)库/API 对象是什么?

4

2 回答 2

2

你似乎已经有了答案。
对此的一般解决方案是使用内存映射文件,让操作系统为缓存和查找而烦恼。
首先尝试最简单和最明显的解决方案。如果它不能让您满意,请优化瓶颈。过早的优化是万恶之源。

于 2009-03-29T10:19:57.667 回答
1

100MB 真的不算大。所以在内存中可能会在新机器上工作。

但是您不希望您的解决方案随着时间的推移而无法扩展。您假设限制为 100MB 的那一刻,有人会尝试使用 200MB。因此,我建议您采取“寻求”路线-这是常见的方法。

于 2009-03-29T06:43:59.683 回答