c# - MemoryMappedFile 的并发 View 抛出 UnauthorizedAccessException

标签 c# .net c#-4.0

我有一个很大的文本文件(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/

相关文章:

c# - 如何在 C# 中将 xsl 转换应用于单个 XmlNode 的示例

c# - 在 XmlDocument 中加载 xml 文件时出错

c# - .NET 可移植类库中的 USB 访问

c# - 新的 'dynamic' C# 4.0 关键字是否弃用了 'var' 关键字?

c# - WPF 自定义 ChartLine 性能问题

c# - 是否可以使用 WIX 创建多语言安装程序?

c# - 使用 MONO 在 LINUX 中开发类似于 Windows 的服务?

c# - 关于ASP.Net Postback的一些问题

c# - 有什么方法可以检查字符串是否为空或空白?

c# - 如何在代码中访问 DataGridCell 的数据对象?