【发布时间】:2013-01-25 12:31:12
【问题描述】:
我正在使用这段代码从文件中提取一个块
// info is FileInfo object pointing to file
var percentSplit = info.Length * 50 / 100; // extract 50% of file
var bytes = new byte[percentSplit];
var fileStream = File.OpenRead(fileName);
fileStream.Read(bytes, 0, bytes.Length);
fileStream.Dispose();
File.WriteAllBytes(splitName, bytes);
有什么方法可以加快这个过程吗?
目前,对于 530 MB 的文件,大约需要 4 - 5 秒。这个时间可以改善吗?
【问题讨论】:
-
提取文件的 50% 效率不高why 4kb to 8kb。如果您有 .Net 4 或更高版本,您可以使用 Memory Mapped Files
-
您的磁盘系统性能如何? 100MB/s 听起来确实很合理。
-
请问您要分割文件是为了什么?拆分文件是您的最终结果还是解决另一个问题的中间步骤?
-
大于 85KB 的数组最终会被收集到很少被收集的从未压缩过的大对象堆上。因此,如果这是在长时间运行的进程中经常调用的内容,您可能会遇到将 200+MB 读取到数组中的内存问题。
-
5 秒写入 530/2 Mb 是常规磁盘子系统的足够性能。程序算法似乎不是瓶颈
标签: c# filestream file-copying