【发布时间】:2011-05-06 11:49:00
【问题描述】:
我对 C# 和编程比较陌生,所以请多多包涵。我正在开发一个应用程序,我需要读取一些文件并以块的形式处理这些文件(例如,数据以 48 字节的块处理)。
我想知道在性能方面,在内存中一次读取整个文件然后处理它,或者以块读取文件并直接处理它们,或者以更大的块(多个块然后处理的数据)。
到目前为止我是如何理解的:
读取内存中的整个文件
优点:
- 它很快,因为最耗时的操作是寻找,一旦磁头就位,它可以非常快地读取
缺点:
-它消耗大量内存
- 它在很短的时间内消耗大量内存(这是我主要害怕的,因为我不希望它显着影响整体系统性能)
分块读取文件
优点:
- 实现起来更容易(更直观)
while(numberOfBytes2Read > 0)
read n bytes
process read data
-它消耗很少的内存
缺点:
-可能需要更多时间,如果磁盘必须再次寻找文件并将磁头移动到适当的位置,平均花费大约 12 毫秒。
我知道答案取决于文件大小(和硬件)。我认为最好一次读取整个文件,但是对于文件的大小,建议一次在内存中读取的最大大小是多少(以字节为单位或相对于硬件 - 例如内存)?
感谢您的回答和时间。
【问题讨论】:
-
读取整个文件还有另一个缺点,那就是它会消耗比可用内存更多的内存。
标签: c# performance file-io