Я работаю над пользовательским проводником файловой системы FAT, и дела идут довольно хорошо. Тем не менее, я хочу знать, есть ли лучший способ для эффективного чтения / записи в карту цепочки. Для больших устройств это может быть невероятно ресурсоемким и очень, очень медленным. Особенно при выделении места.
Вот как я это прочитал:
public void ReadChainMap()
{
chainMap = new uint[clusterCount];
fx.Io.SeekTo(chainMapOffset);
EndianIo io = new EndianIo(fx.Io.In.ReadBytes((int)chainMapSize), EndianType.BigEndian);
io.Open();
for (int x = 0; x < clusterCount; x++)
chainMap[x] = (chainMapEntrySize == 2) ?
io.In.ReadUInt16() : io.In.ReadUInt32();
io.Close();
}
Цепочка иногда может составлять сотни мегабайт.
И вот как я это пишу. Когда выделение и изменения в массиве uM chainMap выполнены, он в основном перебирает этот массив uint и переписывает всю цепочку.
public void WriteChainMap()
{
EndianIo io = new EndianIo(new byte[chainMapSize],
EndianType.BigEndian);
io.Open(); io.SeekTo(0);
for (int x = 0; x < clusterCount; x++)
if (chainMapEntrySize == 2)
io.Out.Write((ushort)chainMap[x]);
else
io.Out.Write(chainMap[x]);
fx.Io.SeekTo(chainMapOffset);
fx.Io.Out.Write(io.ToArray());
}
Я работал над системой кеширования, но я хочу поделиться некоторыми идеями о том, как сделать это лучше.