【问题标题】:What is the best way to display large files without using large amounts of memory?在不使用大量内存的情况下显示大文件的最佳方法是什么?
【发布时间】: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


    【解决方案1】:

    您似乎已经有了答案。
    对此的一般解决方案是使用Memory Mapped files 并让操作系统为缓存和查找而烦恼。
    首先尝试最简单和最明显的解决方案。如果它不能让您满意,请优化瓶颈。 Premature optimizations is the root of all evil.

    【讨论】:

      【解决方案2】:

      100MB 真的没有那么大。所以在内存中可能会在新机器上工作。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-22
        相关资源
        最近更新 更多