读取内存中的整个文件VS读取块

我对C#和编程比较陌生,所以请耐心等待。 我正在开发一个应用程序,我需要读取一些文件并以块的forms处理这些文件(例如,数据以48字节的块为单位处理)。

我想知道什么是更好的,性能方面的,在内存中一次读取整个文件然后处理它或以块的forms读取文件并直接处理它们或以更大的块读取数据(多个数据块是然后处理)。

到目前为止我如何理解事物:

读取内存中的整个文件
优点:
– 它很快,因为最昂贵的操作是寻求,一旦头部就位,它可以读得非常快

缺点:
– 它耗费了大量的内存
– 它在很短的时间内消耗了大量内存(这是我主要害怕的,因为我不希望它明显影响整体系统性能)

以块的forms读取文件
优点:
– 实施起来更容易(更直观)

while(numberOfBytes2Read > 0) read n bytes process read data 

– 消耗很少的内存

缺点:
– 如果磁盘必须再次寻找文件并将磁头移动到适当的位置,这可能需要更多的时间,平均成本约为12毫秒。

我知道答案取决于文件大小(和硬件)。 我认为最好一次读取整个文件,但是对于大文件是多少这样, 一次在内存中读取的最大建议大小是多少(以字节为单位或相对于硬件 – 例如RAM的百分比)?

谢谢你的答案和时间。

建议读取4K或8K缓冲区中的文件。

如果要将文件写回另一个流,您应该永远不会一次读取所有文件。 只需读取缓冲区并将缓冲区写回。 这尤其适用于网络编程。

如果你必须加载整个文件,因为你的操作(文本处理等)需要文件的整个内容,缓冲并没有真正帮助,所以我认为最好使用File.ReadAllTextFile.ReadAllBytes


为什么4KB或8KB?

这更接近底层的Windows操作系统缓冲区。 NTFS中的文件通常存储在磁盘上的4KB或8KB块中,尽管您可以选择32KB的块

你的块需要很大,48个字节当然是小的,4K是合理的。