Tag: memory mapped files

MemoryMappedFile.CreateFromFile始终抛出UnauthorizedAccessException

我意识到.NET 4.0处于测试阶段,但我希望有人能够解决这个问题。 我正在尝试从DLL创建一个内存映射文件: FileStream file = File.OpenRead(“C:\mydll.dll”); using (MemoryMappedFile mappedFile = MemoryMappedFile.CreateFromFile(file, “PEIMAGE”, 1024 * 1024, MemoryMappedFileAccess.ReadExecute)) { using (MemoryMappedViewStream viewStream = mappedFile.CreateViewStream()) { // read from the view stream } } 不幸的是,无论我做什么,我总是得到一个UnauthorizedAccessException , MSDN文档说明了这一点: 操作系统拒绝指定的文件访问权限; 例如,access设置为Write或ReadWrite,但文件或目录是只读的。 我用Sysinternals Process Monitor监视我的应用程序,它显示该文件确实正在成功打开。 我也尝试了内存映射其他非DLL文件,但结果相同。

从MMF访问SQLite数据库

我正在使用System.Data.SQLite lib来访问我的SQLite数据库。 我想将db文件加载到内存并使用MMF(内存映射文件)来访问数据库。 这是否可以使用默认的SQLite库? 编辑: 我喜欢有关如何拥有内存数据库的替代方案。

内存映射文件长度

我正在处理内存映射文件。 有没有办法知道内存映射文件内容的长度? 我想要的是附加现有的内存映射文件。 它很容易在文件中附加字节,但我希望追加字符串。 我们可以检查CAPACITY属性,但它返回我认为的字节大小。 为了更清楚,我正在解释这个场景。 我正在创建内存映射文件A.我在创建它时写“Hello”。 它工作正常。 现在我想将“World”写入现有文件A. 我正在使用下面的代码: var file = MemoryMappedFile.OpenExisting(“myFile”); string str = “String to append”; using (var view = file.CreateViewAccessor()) { using (var stream = file.CreateViewStream()) { System.IO.BinaryWriter writer = new System.IO.BinaryWriter(stream); writer.Write(str.ToArray(), INT SIZE,Convert.ToInt32(view.Capacity), str.Length);//Error } } using (var stream = file.CreateViewStream()) { Console.WriteLine(“Reading appended File”); System.IO.BinaryReader reader = […]

我可以获得内存映射文件的路径吗? (.NET 4.0)

我希望非.NET应用程序访问内存映射文件, 但是这个应用程序不知道内存映射文件的存在 ,所以我需要文件路径。 有可能的?

将字符串数据写入MemoryMappedFile

我在这里关注本教程 我很难弄清楚如何获取字符串“这是一个测试消息”存储在内存映射文件中,然后在另一侧将其拉出。 该教程说使用字节数组。 原谅我,我是新手,先尝试自己。 谢谢,凯文 ##Write to mapped file using System; using System.IO.MemoryMappedFiles; class Program1 { static void Main() { // create a memory-mapped file of length 1000 bytes and give it a ‘map name’ of ‘test’ MemoryMappedFile mmf = MemoryMappedFile.CreateNew(“test”, 1000); // write an integer value of 42 to this file at position 500 […]

读取内存映射文件或知道其大小以正确读取它

在这个问题上, 读取内存映射文件或内存映射视图访问器的所有内容,而不知道它的大小 有一个问题, (int)stream.Length没有给我正确的长度,而是给出了使用的内部缓冲区的大小! 我需要刷新这个问题,因为它非常紧迫。 主要问题是: 我需要类似于ReadToEnd或ReadAllBytes的东西来使用MappedViewAccessor读取MemoryMappedFile的所有内容,如果我不知道它的大小,我该怎么办呢? 我已经搜索过了,我已经看到了这个问题,但这不是我要找的东西: 如何从.NET中的内存映射文件中快速读取字节? 旧答案是: 酒馆 public static ReadMMFAllBytes(string fileName) { using (var mmf = MemoryMappedFile.OpenExisting(fileName)) { using (var stream = mmf.CreateViewStream()) { using (BinaryReader binReader = new BinaryReader(stream)) { return binReader.ReadBytes((int)stream.Length)); } } } } 在这个问题中: 内存映射文件长度 确切的问题没有确切的答案! 问题是关于标题之外的其他问题。

读取内存映射文件或内存映射视图访问器的所有内容,而不知道它的大小

我需要类似于ReadToEnd或ReadAllBytes的东西来使用MappedViewAccessor读取MemoryMappedFile的所有内容,如果我不知道它的大小,我该怎么办呢? 我已经搜索过了,我已经看到了这个问题,但这不是我要找的东西: 如何从.NET中的内存映射文件中快速读取字节? 编辑: 有一个问题,(int)stream.Length没有给我正确的长度,而是给出了使用的内部缓冲区的大小! 我需要刷新这个问题,因为它非常紧迫。

在C#中使用内存映射文件时是否可以避免数据副本?

我对内存映射文件如何在C#中工作的理解是每个数据请求都会产生一个副本。 例如,如果您将大型数据结构保留为文件,则使用内存映射文件将导致映射到RAM的实际文件的内存,以及从文件读取后驻留在GC堆中的副本。 我假设这是因为指针和GC一般来说并不能很好地相处。 那么,有什么方法可以解决这个问题吗? 也许通过一些混合模式C ++可以通过内存映射数据公开托管API? 用不安全的C#直接指针操作怎么样? 我试图解决的一般问题是在多个进程之间共享一个大型数据结构。 数据结构用于回答一小部分“问题”,这些问题可以作为一个简单的API公开(即基本上是一堆其他数据的高度专业化的索引)。 另外,这不会使.NET API对“共享大量数据”场景无用吗?

如何从.NET中的内存映射文件中快速读取字节?

在某些情况下, MemoryMappedViewAccessor类不会为了有效读取字节而剪切它; 我们得到的最好的是通用的ReadArray ,它是所有结构的路由,当你需要字节时涉及几个不必要的步骤。 可以使用MemoryMappedViewStream ,但由于它基于Stream您需要首先寻找正确的位置,然后读取操作本身有许多不必要的步骤。 是否有快速,高性能的方法从.NET中的内存映射文件读取字节数组,因为它应该只是地址空间的特定区域来读取?

内存映射文件.NET

我有一个项目,它需要访问ASP.NET中的大量专有数据。 这是通过在共享内存中加载数据在Linux / PHP上完成的。 我想知道是否尝试使用内存映射文件是可行的方法,或者是否有更好的方法可以提供更好的.NET支持。 我在考虑使用数据缓存,但不确定缓存中保存的数据大小的所有缺陷。