我的任務是提供一個形式非常大(50GB +)ASCII文本文件隨機讀取訪問(第n行的處理請求/在第n行的第n個字)的C#控制檯應用程序。一個非常大(50GB +)ASCII文件,提供隨機讀取訪問
google搜索和閱讀了幾天後,我來執行這樣的願景: 由於的StreamReader擅長順序存取,用它來建立的文件中的行/字的索引(List<List<long>>
地圖,其中map[i][j]
是第i行第j個詞開始的位置)。然後使用索引通過MemoryMappedFile訪問文件,因爲它擅長提供隨機訪問。
是否有解決一些明顯的缺陷?對於給定的任務它會是最優的嗎?
UPD:它將在64位系統中執行。
即使這個列表可能會相當大。我可能只是有一些索引結構,比如一棵平衡樹,每隔100行左右開始文件偏移,然後在那裏尋找並讀取一個緩衝區,然後可以解析這個緩衝區以找到你正在尋找的確切單詞。 – 2013-03-14 21:21:57
我會純粹以字節爲單位創建索引(即使用Stream而不是StreamReader),但除此之外聽起來不錯。如果每行的單詞不是太多,則只需索引行並在每次請求時搜索單詞可能會更有效。儘可能延遲創建'String'對象。 – dtb 2013-03-14 21:21:59