如何检测 MemoryMappedFile 是否正在使用

2024-02-08

在 C# 4.0 中,MemoryMappedFile有几种工厂方法:CreateFromFile, CreateNew, CreateOrOpen, or OpenExisting。我需要打开MemoryMappedFile如果存在,则从文件创建它。我打开内存映射的代码如下所示:

try
{
    map = MemoryMappedFile.OpenExisting(
        MapName,
        MemoryMappedFileRights.ReadWrite
        | MemoryMappedFileRights.Delete);
}
catch (FileNotFoundException)
{
    try
    {
        stream = new FileStream(
            FileName,
            FileMode.OpenOrCreate,
            FileAccess.ReadWrite,
            FileShare.Read | FileShare.Delete);
        map = MemoryMappedFile.CreateFromFile(
            stream, MapName, length + 16,
            MemoryMappedFileAccess.ReadWrite,
            null,
            HandleInheritability.None,
            false);
    }
    catch
    {
        if (stream != null)
            stream.Dispose();
        stream = null;
    }
}

它几乎按照我想要的方式工作,但最终抛出了一个异常OpenExisting太频繁了。有没有办法检查是否MemoryMappedFile在我尝试执行此操作之前实际上已经存在OpenExisting称呼?或者我每次都必须处理异常?

另外,有没有一种方法可以查明当前句柄是否是最后一个拥有该句柄的句柄?MemoryMappedFileopen,确定当当前句柄被释放时文件是否将被关闭?


您可以使用内存映射文件.CreateOrOpen http://msdn.microsoft.com/en-us/library/system.io.memorymappedfiles.memorymappedfile.createoropen.aspx:

map = MemoryMappedFile.CreateOrOpen(
                MapName, length + 16,
                MemoryMappedFileAccess.ReadWrite, 
                MemoryMappedFileOptions.None, null, HandleInheritability.None);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检测 MemoryMappedFile 是否正在使用 的相关文章

随机推荐

  • Google 表格“您无权调用appendRow”

    function myFunction var url https api github com users chaimf90 repos var response UrlFetchApp fetch url var json respon
  • 如何为 EditText 添加下划线

    我在 Android Studio 的 EditText 中遇到一些需要下划线的问题 这就是我正在寻找的 这只是一张照片 不是我的真实文字 但我真的不知道有什么财产可以做到这一点 我现在的代码非常简单 只是 正常 的
  • php-win.exe - 应用程序无法正确启动(0xc00007b)

    我使用的是 Windows 7 64 位 我已经安装了 WampServer 3 0 6 x64 最新版本 我已经安装了Visual C 2012 更新 4 https www microsoft com en us download de
  • 如何根据 Zend_Form 的一个字段的值验证另一个字段的值?

    我正在尝试向字段添加自定义验证器 它应该考虑另一个字段的值 例如 字段 A 最多应为 B 50 我做了一个类实现Zend Validate Interface 但显然 Zend Form 只将当前字段的值发送给验证器 如何让验证者收到所有内
  • 如何确定 R 中是否有互联网连接

    有时我需要从互联网上下载数据 有时 此操作会失败 因为网站已关闭或我的计算机失去了互联网连接 问题 R 中是否有一些函数可以返回 TRUE FALSE 来判断我是否连接到互联网 The curl包有一个功能has internet通过执行以
  • 三角函数调车场算法

    我正在致力于用 C 实现调车场算法 虽然它可以很好地解析带有符号 和 的数学表达式 但由于某种原因 它不适用于正弦余弦函数 例如 如果我尝试计算 sin 45 我会得到 0 707106 但是当我尝试解析表达式时 sin 25 cos 15
  • 如何使用 Windows 搜索搜索 Jar 文件?

    我相信当我们使用 Win2K 时 Windows 搜索会搜索 Jar 文件来查找特定的类 但这在 XP 中似乎不起作用 有谁知道如何在 XP 中启用此功能吗 请注意 要在 Win2K 中进行搜索 我们只需输入 jar 作为文件 并输入 Cl
  • PHP: header("位置...突然停止工作

    我在我的服务器上修改了一个非常简单的 php 页面 它停止工作了 结果我得到一个空白页 其中没有源代码 我修改回以前的网址 但它仍然不起作用 这是怎么回事 Thanks
  • Mongoose 复合索引唯一 + 稀疏

    我想创建一个索引来确保我没有重复的serialNr的组合内 manufacturer art 但有些物品没有serialNr 这些我不想检查 索引 Code mySchema index serialNr 1 art 1 manufactu
  • 多核和java

    我刚刚读到 服务器如何处理多个请求 最终得到了 java 多线程和多核 cpu 在计算机是单核的时候 如果 java 同时有 2 个线程 那么 jvm 调度程序将负责为每个线程分配时间 因此 两个线程永远不会并行运行 而是利用理想时间 例如
  • 如何在单独的线程中创建带有进度条的MFC对话框?

    我的应用程序可能需要一段时间才能连接到数据库 此连接是通过单个库函数调用建立的 即我无法将进度更新放在那里并进行回调或类似的操作 我的想法是在连接到数据库之前在单独的线程中创建一个带有进度条的对话框 该对话框将不断更改进度状态CProgre
  • 从 VIM 插件中检测文件类型?

    我有一个 vim 插件 它定义了一堆键映射 我试图弄清楚如何根据文件类型更改键映射的定义 例如 如果文件是 py 则将键映射到 X 如果文件是 php 则将键映射到 Y Thanks 是的 一种方法是使用 autocmd 调用设置地图的自定
  • 使用 DDD 创建子实体的正确方法

    我对 DDD 世界相当陌生 在阅读了几本有关它的书籍 其中包括 Evans DDD 后 我无法在互联网上找到我的问题的答案 使用 DDD 创建子实体的正确方法是什么 你看 互联网上的许多信息都在某种简单的层面上运作 但细节是魔鬼 为了简单起
  • iOS地理围栏中区域可以设置的最大和最小半径是多少

    我当时正在 iOS 中进行地理围栏工作 我实际上想在地图上设置不同的区域 每个区域的半径不同 我实际上想知道 iOS 地理围栏中区域的最小和最大半径 Thanks 在 iOS 中 没有指定最小半径 苹果表示 具体的阈值距离由硬件和当前可用的
  • laravel dusk TeaDown() 必须与 Illuminate\Foundation\Testing\TestCase::tearDown() 兼容

    public function tearDown this gt browse function Browser browser browser gt click navbarDropdown gt click dropdown item
  • 这些嵌套向量是如何连接的?

    我编写了一段代码 它创建了一个向量 记分板 其中包含 3 个大小为 3 的独立向量 所有向量都包含符号 在所有索引 0 2 处 当我现在执行 向量集 时在记分牌的第一个向量上 要将其第一个元素更改为 X 向量 2 和 3 也会更改 这是如何
  • 防止在 Javascript 中自动创建全局变量

    我刚刚花了一些时间调试一个问题 归根结底是忘记使用var关键字位于新变量标识符前面 因此 Javascript 会自动在全局范围内创建该变量 有什么方法可以防止这种情况发生 或者更改默认行为 而不使用像 JSLint 这样的验证器 在编写和
  • 如何仅在第一次启动时显示视图?

    我使用 Xcode 4 5 和故事板构建了一个应用程序 第一次启动应用程序时 我希望初始视图控制器出现 并附带必须接受才能继续的条款和条件 之后 我希望应用程序启动并跳过第一个视图控制器并转到第二个视图控制器 我知道我必须使用 NSUser
  • Android 4.3 BTLE作为服务器:如何启动广告?

    我正在尝试使用 4 3 中的新 BTLE API 在 Nexus 7 上实现 BTLE 服务器 我遇到了几个问题 首先 SDK 中没有示例 唯一的例子是针对客户的 其次 文档实际上告诉你做错误的事情 它指出 人们必须使用BluetoothA
  • 如何检测 MemoryMappedFile 是否正在使用

    在 C 4 0 中 MemoryMappedFile有几种工厂方法 CreateFromFile CreateNew CreateOrOpen or OpenExisting 我需要打开MemoryMappedFile如果存在 则从文件创建