7

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

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

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

知道如何实现这一目标的最佳方法是什么吗?

我应该使用小缓冲区吗?但既然它会很快被填满,那么刷新缓冲区实际上不会减慢操作速度吗?

谢谢,马丁

4

2 回答 2

2

我可能会对文件进行内存映射,然后以规则(块间隔)的间隔循环访问每个文件的元素。

当然,假设您能够使用 .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);
        }
    }
}

但归根结底,每种方法都会有不同的性能特征,因此您可能需要通过一些试验和错误来找出性能最高的方法。

于 2013-06-25T12:08:50.800 回答
1

我会简单地阅读这些文件。当你这样做时,NTFS 中的 CacheManager 会自动缓存这些文件,你不必关心其他任何事情——这正是 CacheManager 的作用,通过读取这些文件,你给它一个提示,这些文件应该被缓存。

于 2013-06-25T16:56:08.230 回答