私はカスタム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());
}
私はキャッシュシステムに取り組んできましたが、これをより良くする方法についてもう少しアイデアが欲しいです。