我需要从 3.7 GB 文件中读取小数据序列。我需要读取的位置不是相邻的,但我可以订购 IO 以便从头到尾读取文件。
该文件存储在 iSCSI SAN 上,该 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 的方法,因为我的读取性能有些低于标准。移动头部的所有寻道时间似乎都在增加。