背景


多个进程直接需要传递大量图片,所以对性能要求较高。支付复制内存显然比转成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

posted on   闻缺陷则喜何志丹  阅读(33)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~



点击右上角即可分享
微信分享提示