Lio*_*ana 6 c# performance file-io
我正在研究一个需要高文件I/O性能的系统(使用C#).基本上,我从文件的开头填充大文件(~100MB)直到文件结束.每隔约5秒我就会向文件中添加〜5MB(从文件的开头顺序),每次批量我都在刷新流.每隔几分钟我就需要更新一个我在文件末尾写的结构(某种元数据).
当冲洗每个散装时,我没有性能问题.但是,当更新文件末尾的元数据时,我的性能确实很低.我的猜测是,在创建文件时(也应该加快速度),文件并不真正在磁盘上分配整个100MB,当我刷新元数据时,它必须分配所有空间直到文件结束.
男孩/女孩,任何想法我怎么能克服这个问题?
非常感谢!
来自评论:
一般来说,代码如下,首先打开文件:
m_Stream = new FileStream(filename,
FileMode.CreateNew,
FileAccess.Write,
FileShare.Write, 8192, false);
m_Stream.SetLength(100*1024*1024);
Run Code Online (Sandbox Code Playgroud)
每隔几秒我就会写5MB.
m_Stream.Seek(m_LastPosition, SeekOrigin.Begin);
m_Stream.Write(buffer, 0, buffer.Length);
m_Stream.Flush();
m_LastPosition += buffer.Length; // HH: guessed the +=
m_Stream.Seek(m_MetaDataSize, SeekOrigin.End);
m_Stream.Write(metadata, 0, metadata.Length);
m_Stream.Flush(); // Takes too long on the first time(~1 sec).
Run Code Online (Sandbox Code Playgroud)
正如上面所建议的,这是否没有意义(假设您必须在文件末尾有元数据)先写它。
这会做两件事(假设是一个非稀疏文件)... 1. 为整个文件分配总空间 2. 当空间准备好并等待时,使任何后续写入操作更快一些。
你不能异步执行此操作吗?至少应用程序可以继续处理其他事情。
| 归档时间: |
|
| 查看次数: |
3471 次 |
| 最近记录: |