从托管代码到非托管代码跨共享内存共享整数数组
Share integer array across shared memory from Managed to Unmanaged code
我想分享一个固定大小的integer array
,从C#
中的Windows Service
到unmanaged C++
中编写的代码。这将跨越两个进程,C#
中的Windows Service
,到C++
中的另一个进程。
这个事务需要执行一次,并且它不是一个大数组,只是需要在两个共享内存之间传递。
实现这一目标的最有效方法是什么?也许与memory mapped files
,但我不确定如何将数据传递。
编辑
我不希望使用CLI
包装器,或P/INVOKE
(因为我知道这是时间昂贵的)。
我将继续内存映射,但我不确定数据如何在两个marshalled
和unmarshalled
之间。
在c#端,你可以使用MemoryMappedFile
类来访问内存映射文件。
在非托管端,您可以使用Windows API函数CreateFileMapping()
打开映射文件,然后使用MapViewOfFile
对文件中的数据获取void*
。然后,您可以将void*
强制转换为int*
,以访问作为整型数组的数据。
您可能还想使用一个命名的同步事件(在c#中使用EventWaitHandle
,在Windows API中使用CreateEvent()
)来通知MMF何时已被填充。
有不同的方法来实现这一点-
- 写一个小的CLI包装层。
- 使用共享资源。例如,以c#形式写入文件,然后用c++ 读取
相关文章:
- 使用Boost Interprocess创建托管共享内存需要很长时间
- 字符串共享内存映射的向量
- CUDA 使用共享内存平铺 3D 卷积实现
- 共享内存:MapViewOfFile 返回错误 5
- 如何在多写入器情况下对文件支持的共享内存中的大页面出错
- 有没有办法列出所有共享内存对象的名称?
- 共享内存的升压容器是否实现锁定?
- 共享内存中的健壮互斥锁不是那么健壮
- 使用IPC/共享内存将Integer数组从C++传递到Python
- 共享内存和性能
- 在这种特殊情况下,我是否需要在共享内存中使用原子类型
- 是否可以在专用内存空间中分配一个为提升管理共享内存而创建的对象
- fork(),在C中共享内存和指针
- 访问共享内存而不使用易失性、std::atomic、信号量、互斥锁和自旋锁
- 提升进程间共享内存open_or_create每次都会引发异常
- 通过 mmap-ed 共享内存传递可变长度 C 字符串
- 越界访问 CUDA 共享内存
- 在共享内存中插入映射映射时出现编译器错误
- 矩阵矢量产品 CUDA 通过平铺和共享内存提高性能
- 如何更改在 c++ 中使用提升库创建的共享内存的路径