gpt4 book ai didi

c# - MemoryMappedFile 的并发 View 抛出 UnauthorizedAccessException

转载 作者:太空宇宙 更新时间:2023-11-03 11:20:03 26 4
gpt4 key购买 nike

我有一个很大的文本文件 (0.5 gig),我需要在不同的情况下一遍又一遍地解析它,在一个方法中要解析多达 40 次。当然,这将花费很长时间,我试图通过同时进行来更快地处理文件。我知道 MemoryMappedFile 非常适合处理大文件和并发性,所以我选择使用它。

现在,我正在同时创建文件的两个 View ( View 属于两个不同的部分),但是一个 View 工作得很好,另一个 View 抛出 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");

你知道是什么原因造成的吗?

最佳答案

这可能与您如何创建内存映射文件有关。查看 John Skeet 对此 post 的回答. MemoryMappedFileAccess.Read 访问权传递给 CreateFromFile 方法。

编辑:如注释所示,CreateViewAccessor 方法采用偏移量和大小作为参数来确定 View 将访问文件的哪一部分。如果这些值超出文件的实际大小,将抛出 UnauthorizedAccessException。

关于c# - MemoryMappedFile 的并发 View 抛出 UnauthorizedAccessException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11349242/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com