【发布时间】:2010-11-21 12:16:06
【问题描述】:
我需要从一个 3.7 GB 的文件中读取一小段数据。我需要读取的位置是不相邻的,但我可以对 IO 进行排序,以便从头到尾读取文件。
文件存储在 iSCSI SAN 上,应该能够处理/优化排队的 IO。
问题是,我怎样才能一次性请求我需要的所有数据/位置?可能吗?我不认为异步 IO 是一个选项,因为读取非常小(20-200 字节)
目前代码如下:
using (var fileStream = new FileStream(dataStorePath, FileMode.Open, FileAccess.Read, FileShare.Read))
{
for (int i = 0; i < internalIds.Count();i++ )
{
fileStream.Position = seekPositions[i].SeekPosition;
... = Serializer.DeserializeWithLengthPrefix<...>(fileStream, PrefixStyle.Base128);
}
...
}
我正在寻找改进此 I/O 的方法,因为我的读取性能有些低于标准。移动头部的所有寻道时间似乎都在加起来。
【问题讨论】:
标签: c# performance file-io disk