在不使用大量内存的情况下显示大文件的最佳方法是什么?

时间:2009-03-29 05:18:51

标签: .net file file-io scroll memory-mapped-files

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

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

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

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

那么在Short中,我是否可以分页数据,生成的图像,或者两者兼而有之,还是根据需要获取/生成它们?什么是最适合此任务的(WPF / .Net)库/ API对象?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

100MB真的不是那么大。因此在内存中可能适用于新机器。

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

相关问题