我有非常不寻常的要求:
我想从特定文件夹加载所有文件(到目前为止很容易)。我需要一些内存占用很小的东西。

现在变得复杂了(至少对我而言)。我不需要存储或使用文件的内容-我只需要强制块级缓存机制来缓存该特定文件夹使用的所有块。

我知道有很多不同的方法(BinaryReader,StreamReader等),但是我的情况很特殊,因为我不在乎内容...

任何想法是实现这一目标的最佳方法是什么?

我应该使用小缓冲区吗?但是由于它会很快填满,所以刷新缓冲区实际上不会减慢该操作的速度吗?

谢谢,
马丁

最佳答案

我也许会memory map文件,然后循环以规则的(块间隔)间隔访问每个文件的元素。

当然,假设您能够使用.Net 4.0。

在伪代码中,您将执行以下操作:

using ( var mmf = MemoryMappedFile.CreateFromFile( path ) )
{
    for ( long offset = 0 ; offset < file.Size ; offset += block_size )
    {
        using ( var acc = accessor = mmf.CreateViewAccessor(offset, 1) )
        {
            acc.ReadByte(offset);
        }
    }
}

但是最终,每种方法都将具有不同的性能特征,因此您可能必须经过反复试验才能找出哪种方法最有效。

09-30 13:04
查看更多