我有一個大的文本文件(0.5演出),我需要在不同的情況下反覆解析,在單個方法中多達40次。當然這需要很長時間,我試圖通過同時處理文件來更快地處理文件。據我所知,MemoryMappedFile
對於處理大文件和併發是非常好的,所以我選擇使用它。MemoryMappedFile的併發視圖拋出UnauthorizedAccessException
現在,我正在同時創建文件的兩個視圖(視圖是兩個不同的部分),但一個視圖很好,另一個視圖會拋出一個UnauthorizedAccessException
。下面是有罪代碼:
private void PartitionAndAnalyzeTextBlock(int start, int length)
{
Console.WriteLine("Starting analysis");
//Exception thrown here
using (var accessor = file.CreateViewAccessor(start, length, MemoryMappedFileAccess.Read))
{
char[] buffer = new char[BufferSize];
for (long i = 0; i < length; i += 5)
{
accessor.ReadArray(i, buffer, 0, 5);
string retString = new string(buffer);
frequencyCounter.AddOrUpdate(retString, 1, (s, j) => j++);
}
}
Console.WriteLine("Finished analysis");
}
file
在這一行實例:
private MemoryMappedFile file = MemoryMappedFile.CreateFromFile(path, FileMode.Open, "MemoryMappedPi");
你有什麼想法什麼會導致此?
這個例外沒有任何意義。假設它是由環境引發的,比如惡意軟件掃描程序。您無法在32位進程中分配* 2 * 0.5 GB的視圖,因此首先要少得多。 – 2012-07-05 18:25:17
由環境引發的異常?我不知道這是可能的。此外,還有四個視圖同時運行,總共* 0.5 GB。每個是0.5GB文件的四分之一。 – Michael 2012-07-05 18:35:02