背景

多个进程直接需要传递大量图片,所以对性能要求较高。支付复制内存显然比转成byte[]再复制优越。

命名空间

using System;
using System.Diagnostics;
using System.Runtime.InteropServices;

代码

public CMainTestForm()
        {
            InitializeComponent();
            WriteIntToMemFile(34);
        }

static unsafe void WriteIntToMemFile(int i)
        {
            using (var mmf = System.IO.MemoryMappedFiles.MemoryMappedFile.CreateNew("HZD20230925", 42))
            using (var view = mmf.CreateViewAccessor())
            {
                byte* poke = null;
                view.SafeMemoryMappedViewHandle.AcquirePointer(ref poke);
                CopyMemory(new System.IntPtr(poke), new System.IntPtr(&i), sizeof(int));
                view.SafeMemoryMappedViewHandle.AcquirePointer(ref poke);
                int iRead = view.ReadInt32(0);
                Debug.Assert(iRead == i);
            }
        }

[DllImport("kernel32.dll", EntryPoint = "RtlMoveMemory", CharSet = CharSet.Ansi)]
        public extern static long CopyMemory(IntPtr dest, IntPtr source, int size);

测试环境

Win7 VS2022

C#不通过byte[],直接对内存映射文件复制内存的更多相关文章

  1. Java NIO 内存映射文件

    Java NIO 内存映射文件 @author ixenos 文件操作的四大方法 前提:内存的访问速度比磁盘高几个数量级,但是基本的IO操作是直接调用native方法获得驱动和磁盘交互的,IO速度限制 ...

  2. Java编程的逻辑 (61) - 内存映射文件及其应用 - 实现一个简单的消息队列

    本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...

  3. C++中使用内存映射文件处理大文件

    引言 文件操作是应用程序最为基本的功能之一,Win32 API和MFC均提供有支持文件处理的函数和类,常用的有Win32 API的CreateFile().WriteFile().ReadFile() ...

  4. 内存映射文件详解-----C++实现

    先不说内存映射文件是什么.贴个代码先,. #include <iostream> #include <fcntl.h> #include <io.h> #inclu ...

  5. .NET 4.0中使用内存映射文件实现进程通讯

    操作系统很早就开始使用内存映射文件(Memory Mapped File)来作为进程间的共享存储区,这是一种非常高效的进程通讯手段.Win32 API中也包含有创建内存映射文件的函数,然而,这些函数都 ...

  6. C#内存映射文件学习[转]

    原文链接 内存映射文件是由一个文件到进程地址空间的映射. C#提供了允许应用程序把文件映射到一个进程的函(MemoryMappedFile.CreateOrOpen).内存映射文件与虚拟内存有些类似, ...

  7. 【VS开发】内存映射文件3

    内存映射文件 内存映射文件,是由一个文件到一块内存的映射.Win32提供了允许应用程序把文件映射到一个进程的函数 (CreateFileMapping).内存映射文件与虚拟内存有些类似,通过内存映射文 ...

  8. Windows进程间通讯(IPC)----内存映射文件

    内存映射文件原理 内存映射文件是通过在虚拟地址空间中预留一块区域,然后通过从磁盘中已存在的文件为其调度物理存储器,访问此虚拟内存空间就相当于访问此磁盘文件了. 内存映射文件实现过程 HANDLE hF ...

  9. 第17章 内存映射文件(3)_稀疏文件(Sparse File)

    17.8 稀疏调拨的内存映射文件 17.8.1 稀疏文件简介 (1)稀疏文件(Sparse File):指的是文件中出现大量的0数据,这些数据对我们用处不大,但是却一样的占用空间.NTFS文件系统对此 ...

  10. 《Java核心技术卷二》笔记(二)文件操作和内存映射文件

    文件操作 上一篇已经总结了流操作,其中也包括文件的读写.文件系统除了读写以为还有很多其他的操作,如复制.移动.删除.目录浏览.属性读写等.在Java7之前,一直使用File类用于文件的操作.Java7 ...

随机推荐

  1. SciTech-EECS-MCU-STM32: 高精度实时测量: 电压、电流

    硬件开发>单片机>STM32: 电流电压检测模块 参考Links MCU实现高精度的PWM输出和电流采样 - 21ic论坛 Analog.com: 宽动态范围的高端电流 检测:三种解决方案 ...

  2. ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061) --九五小庞

    修改Mysql数据库默认密码后登陆报  ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061) 注意:当修改M ...

  3. 算法题技巧-Python collections.defaultdict

    想使用哈希表存元素个数想起来defaultdict dict和defaultdic的区别 访问不存在的键: dict:当访问不存在的键时,会抛出KeyError异常. defaultdict:当访问不 ...

  4. FFmpeg 的介绍与使用

    FFmpeg既是一种音视频编解码工具,也是一组音视频解码开发套件.作为编解码开发套件,它为开发者提供了丰富的音视频处理的调用接口. https://blog.csdn.net/u011330638/a ...

  5. vue报错-Object(...) is not a function

    今天项目发现一个Vue的报错 vue报错-Object(...) is not a function 检查代码 没发现问题,因为出现这个错误是因为自己在封装的api.js里面增加了一个axios请求, ...

  6. Linux系统中输出文件内容的方法总结

    1. 使用cat指令 cat flag 2.使用重定向 echo $(<flag) <flag:这里使用了文件重定向操作符 <,将文件 flag 的内容直接读取为标准输入,输出的就是 ...

  7. RoBERTa 和 ALBERT

    BERT 模型是 2018 年提出的,并在很多自然语言处理任务有前所未有的提升.因此 2019 年就有很多工作是围绕着 BERT 展开的,其中出现了两个 BERT 的改进版模型,RoBERTa 和 A ...

  8. GIT 常见操作场景

    git对于大家应该都不太陌生,熟练使用git已经成为程序员的一项基本技能,尽管在工作中有诸如 Sourcetree这样牛X的客户端工具,使得合并代码变的很方便.但找工作面试和一些需彰显个人实力的场景, ...

  9. for循环的学习,内部有不懂得地方

    # for循环介绍,他是一种可迭代的循环.暂时不知道什么是迭代: # 字符串是可迭代对象. """ 格式书写: for 循环: for 变量 in 可迭代的东西: 代码 ...

  10. 2025 Gitee vs. GitHub:全面对比与选择指南

    2025 Gitee vs. GitHub:全面对比与选择指南 引言 Gitee 和 GitHub 均为主流代码托管平台,但在中国开发生态中,Gitee 凭借本地化优势.国产属性和社区资源,已成为更符 ...