我有非常不寻常的请求:我想加载特定文件夹中的所有文件(到目前为止很容易).我需要占用内存非常小的东西.
现在它变得复杂(至少对我而言).我不需要存储或使用文件的内容 - 我只需要强制块级缓存机制来缓存该特定文件夹使用的所有块.
我知道有很多不同的方法(BinaryReader,StreamReader等),但我的情况很特别,因为我不关心内容......
知道如何实现这一目标的最佳方法是什么?
我应该使用小缓冲区吗?但由于它会很快填满,不会冲洗缓冲区实际上会减慢操作速度吗?
谢谢,马丁
我可能会内存映射文件,然后以规则(块间隔)间隔循环访问每个文件的元素。
当然假设您能够使用.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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
但归根结底,每种方法都会有不同的性能特征,因此您可能需要进行一些试验才能找出性能最佳的方法。