【发布时间】:2015-09-02 08:44:03
【问题描述】:
我希望分享一个固定大小的integer array,从C# 中的Windows Service 到unmanaged C++ 中编写的代码。这将跨越 2 个进程,C# 中的 Windows Service 到 C++ 中的另一个进程。
这个事务需要做一次,而且不是一个大数组,只是需要传递,跨越两者之间的共享内存。
实现这一目标的最有效方法是什么?也许使用memory mapped files,但我不确定数据将如何传递。
编辑 -
我不希望使用CLI 包装器或P/INVOKE(因为我知道这很耗时)。
我将继续进行内存映射,但我不确定数据是如何跨越两者的marshalled 和unmarshalled。
【问题讨论】:
-
尝试编写低延迟代码。据我了解,P/Invoke 需要时间。
-
我想我会使用内存映射文件,但我不确定如何在托管端对数据进行编组,然后在另一端进行解组。
-
您通常只使用内存映射文件在两个独立进程之间传输数据。您的问题并不清楚您实际上是在使用两个单独的进程,还是只是想在非托管 DLL 中创建一个进程内调用代码。是哪一个?使用 MMF 在进程内传输数据可能比仅使用 P/Invoke 调用传输数组要慢。
-
不,您只需使用
MemoryMappedViewAccessor.Write()或MemoryMappedViewAccessor.WriteArray()来写入整数。它将在进程之间对齐。你读过the documentation for MMFs吗? (当然,您需要对非托管代码使用 Windows API 函数。)
标签: c# c++ arrays shared-memory memory-mapped-files