Ben*_*Ben 5 c# performance file-io
我对C#和编程比较陌生,所以请耐心等待.我正在使用一个应用程序,我需要读取一些文件并以块的形式处理这些文件(例如,数据以48字节的块为单位处理).
我想知道什么是更好的,性能方面的,在内存中一次读取整个文件然后处理它或以块的形式读取文件并直接处理它们或以更大的块读取数据(多个数据块是然后处理).
到目前为止我如何理解事物:
在内存中读取整个文件的
优点:
- 速度快,因为最耗时的操作是寻求,一旦头部就位,它可以读得相当快
缺点:
- 消耗大量内存
- 在很短的时间内消耗大量内存(这是我主要害怕的,因为我不希望它明显影响整体系统性能)
以块
为例读取文件:
- 实现起来更容易(更直观)
while(numberOfBytes2Read > 0)
read n bytes
process read data
Run Code Online (Sandbox Code Playgroud)
- 消耗很少的内存
缺点:
- 如果磁盘必须再次寻找文件并将磁头移动到适当的位置,这可能需要更多的时间,平均成本约为12毫秒.
我知道答案取决于文件大小(和硬件).我认为最好一次读取整个文件,但是对于大文件是多么真实,一次在内存中读取的最大建议大小是多少(以字节为单位或相对于硬件 - 例如RAM的百分比)?
谢谢你的答案和时间.
建议读取4K或8K缓冲区中的文件.
如果要将文件写回另一个流,您应该永远不会一次读取所有文件.只需读取缓冲区并将缓冲区写回.这尤其适用于网络编程.
如果您有负载,因为您的操作(文字处理等),整个文件所需要的文件的全部内容,缓冲并没有真正的帮助,所以我相信这是最好使用File.ReadAllText或File.ReadAllBytes.
这更接近底层的Windows操作系统缓冲区.NTFS中的文件通常存储在磁盘上的4KB或8KB块中,尽管您可以选择32KB的块
| 归档时间: |
|
| 查看次数: |
3050 次 |
| 最近记录: |