Passthru读取文件夹中的所有文件

时间:2013-06-25 12:05:40

标签: c# .net ntfs

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

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

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

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

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

谢谢, 马丁

2 个答案:

答案 0 :(得分:2)

我可能会memory map这些文件,然后以常规(块间隔)间隔循环访问每个文件的元素。

当然假设您可以使用.Net 4.0。

在psuedo代码中,您可以执行以下操作:

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);
        }
    }
}

但是在一天结束时,每种方法都会有不同的性能特征,因此您可能需要使用一些试验和错误来找出性能最佳的方法。

答案 1 :(得分:1)

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