提供对非常大(50GB +)ASCII文件的随机读访问

vor*_*rou 1 c# io memory-mapped-files bigdata

我的任务是以C#控制台应用程序的形式提供对非常大(50GB +)的ASCII文本文件(在第n行中处理第n行/第n个单词的请求)的随机读取访问.

谷歌搜索和阅读几天后,我已经达到了这样的实现愿景:由于StreamReader擅长顺序访问,使用它来构建文件中的行/单词的索引(List<List<long>>map,其中map[i][j]是第i个第j个单词的位置)线开始).然后使用索引通过MemoryMappedFile访问文件,因为它擅长提供随机访问.

解决方案中是否存在一些明显的缺陷?它对于给定的任务是否是最佳的?

UPD:它将在64位系统上执行.

Dai*_*Dai 5

看起来很好,但是如果你正在使用MemoryMapping,那么你的程序只能在64位系统上运行,因为你超出了可用的有效2GB地址空间.

你可以使用a FileStream和调用.Seek()来适当地跳转到选定的偏移量,所以我认为不需要使用MemoryMapped文件.