Я работаю над обычным файловым файловым файлом 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();
}
Цепь иногда может быть сотни мегабайт.
И вот как я его пишу. Когда выделение и модификация массива chainMap uint выполнены, он будет в основном прокручивать этот массив 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());
}
Я работаю над системой кеша, но хочу получить еще несколько идей о том, как сделать это лучше.
Ну, дело в том, что при распределении вам нужно, чтобы он был готов (в самом легком), и прокручивайте предмет до тех пор, пока не найдете свободный кластер. И вы сделаете это для того, сколько кластеров требуется файлу. Теперь, если я прокручу цепочку на устройстве и прочитаю целочисленное значение, это будет значительно медленнее, чем чтение в памяти. – Eaton