我正在开发一个自定义的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 2010-07-21 17:52:25