我有一个大文本文件(0.5 gig),我需要在不同的情况下一遍又一遍地解析它,在一个方法中多达 40 次。当然,这将需要很长时间,我试图通过同时执行来更快地处理文件。我知道 aMemoryMappedFile
非常适合处理大文件和并发,所以我选择使用它。
现在,我同时创建了文件的两个视图(这些视图属于两个不同的部分),但是一个视图效果很好,另一个则抛出了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");
你知道什么会导致这种情况吗?