- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有创建内存映射文件的代码,如下所示:
using (Mutex mutex = new Mutex(false, CoordinatorMutexName))
{
mutex.WaitOne();
var security = new MemoryMappedFileSecurity();
security.SetAccessRule(
new AccessRule<MemoryMappedFileRights>(
new SecurityIdentifier(WellKnownSidType.WorldSid, null), // everyone
MemoryMappedFileRights.FullControl,
AccessControlType.Allow));
MemoryMappedFile coordinator = MemoryMappedFile.CreateOrOpen(
CoordinatorMMFName,
16 * 1024 * 1024 + 4,
MemoryMappedFileAccess.ReadWrite,
MemoryMappedFileOptions.DelayAllocatePages,
security,
HandleInheritability.None);
...
...
}
在某些情况下(如下所述),CreateOrOpen 调用会引发以下异常:
System.IO.IOException: The handle is invalid.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.MemoryMappedFiles.MemoryMappedFile.CreateOrOpenCore(SafeFileHandle fileHandle, String mapName, HandleInheritability inheritability, MemoryMappedFileSecurity memoryMappedFileSecurity, MemoryMappedFileAccess access, MemoryMappedFileOptions options, Int64 capacity)
at System.IO.MemoryMappedFiles.MemoryMappedFile.CreateOrOpen(String mapName, Int64 capacity, MemoryMappedFileAccess access, MemoryMappedFileOptions options, MemoryMappedFileSecurity memoryMappedFileSecurity, HandleInheritability inheritability)
它只会在运行自动化测试时抛出此异常,我无法在调试器内部或外部在本地重现此异常。我尝试仅将上述代码提取到独立测试中,但无法重现该问题。但是这里的代码太多了,无法发布所有内容。 MemoryMappedFile 在线程的持续时间内一直存在(假设它已创建),然后被释放。
以下是测试失败的条件:测试旨在从多个线程执行此代码。它们在 NUnit 中,在 CruiseControl.NET 下运行,其服务在 64 位 Windows 2008 Server 上的域帐户(而不是本地计算机帐户)下运行。我可以在登录同一台机器时手动运行这些相同的测试,它们都通过了。
我知道这可能不足以让某人直接解决问题,但我什至不知道如何调查这个问题。在尝试创建或打开内存映射文件时,哪些事情会导致“句柄无效”消息?
最佳答案
它记录了 CreateFileMapping() 的错误代码,这是创建内存映射文件的底层 winapi 函数:
If lpName matches the name of an existing event, semaphore, mutex, waitable timer, or job object, the function fails, and the GetLastError function returns ERROR_INVALID_HANDLE. This occurs because these objects share the same namespace.
所以选择一个好的随机名称来避免这个错误。您可以从 Visual Studio 获得一个:工具 + 创建 GUID,选项 4。它是全局唯一的。
关于c# - MemoryMappedFile.CreateOrOpen 抛出句柄无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10196897/
在我的 WCF 服务中,我需要提供支持 Range 的文件下载功能用于分 block 下载的 HTTP header 。第一次调用GetFile服务方法创建新的MemoryMappedFile来自磁盘
在 Windows 下,当容量参数(最后一个参数)设置为比基础文件更大的大小时,此 F# 代码会将文件从 12 字节扩展到 655346 字节。这似乎是扩展内存映射文件的最干净的方法。在 mono/l
我有一些方法可以使用 MemoryMappedFiles 来写入/读取数据。如果我使用简单的字符串作为文件名,它们就可以正常工作,例如“file.mmf”。但是,如果我使用完整目录路径,则会抛出上述异
我在执行 MemoryMappedFile 流式传输时遇到了一个小问题。我有 2 个项目,一个用于发送字节,另一个用于读取字节。在这两个进程之间应该有一个 2 秒的 sleep 定时器。 我已经实现了
我在使用 C# 中的 MemoryMappedFiles 时遇到了一些问题。当我只使用 1 个进程时,它们工作得很好,但是当我尝试从不同的进程访问 mmf 文件时,我得到允许这样做的错误。 我有一个数
我正在学习本教程 here 我很难弄清楚如何将字符串“THIS IS A TEST MESSAGE”存储在内存映射文件中,然后将其从另一端拉出。本教程说使用字节数组。请原谅我,我是新手,先自己尝试。
我正在使用 MemoryMappedFile 在两个进程之间交换数据。所以我在两个过程中都创建/打开了这样的文件: MemoryMappedFile m_MemoryMappedFile = Memo
我有两个 .NET 4.0 WinForms 应用程序(主要)从共享的 MemoryMappedFiles 读取地理数据。最终用户可以自由启动其中一个应用程序或另一个应用程序,或同时运行这两个应用程序
如果我在同一个 MemoryMappedFile 中并行读写会发生什么?我是否有必要在阅读之前通过 Mutext 锁定它们,如 MSDN 上的示例所示? Memory-Mapped Files 最佳答
我有一个处理Excel文件(之前上传到服务器)的网络服务,涉及到很多数据库更新,需要相当长的时间。我想提供另一个 web 服务,可以调用它来检查这个过程的进度。它将进程的 ID(可能是 GUID)作为
我需要将应用程序“A”中的变量值共享给同一系统上的不同应用程序。我只需要根据要求使用 MemoryMappedFiles。我创建了另一个简单的应用程序“B”,它从应用程序 A 中读取共享变量的值。但是
我有创建内存映射文件的代码,如下所示: using (Mutex mutex = new Mutex(false, CoordinatorMutexName)) { mutex.WaitOne
我有一组大型对象(超过 20GB),我需要从应用程序快速访问它们。 到目前为止,我已经在应用程序启动时从磁盘读取这些文件到 RAM。这是一项昂贵的任务,因为文件被反序列化为内存中的对象。但是,在加载这
如何使用 MemoryMappedFile 读取文件字节并将其放入 byte[] 数组? 最佳答案 假设您只想读取文件的一部分,这样的事情应该可行: long offset = 0x10000000;
是否可以结合使用 MemoryMappedFile 和 FileSystemWatcher?换句话说,如何为 FileSystemWatcher 的构造函数获取内存映射文件的路径: new FileS
我的任务是实现一个搜索功能,该功能将搜索几个大型(几 MB)日志文件并返回包含关键字的行。日志文件不断被添加到池中,因此每次搜索都必须是动态的。 创建 MemoryMappedFile 是否有意义?对
在 C# 4.0 中,MemoryMappedFile 有几个工厂方法:CreateFromFile、CreateNew、CreateOrOpen 或 打开现有。如果 MemoryMappedFile
正如标题所说;我可以依赖 MemoryMappedFile 来创建一个全为零的文件吗?我已经通过读取一些新创建的文件进行了测试,但这种“测试”似乎是徒劳的,尽管我还没有看到非零字节。 是否有任何我遗漏
下面的代码抛出这个异常: “该进程无法访问文件 '\filename',因为它正被另一个进程使用。” 很公平,但是关闭阅读器和/或 mmf 以便删除文件的正确方法是什么?我认为 MemoryMappe
我用 MemoryMappedFile 做了一个简单的测试 msdn说: 2 个进程,1 个内存映射文件: 第一个进程添加字符串“1” 第一个进程等待 第二个进程添加字符串“2”并终止 第一个进程现在
我是一名优秀的程序员,十分优秀!