从 .NET 程序集透明地访问本机内存
Access native memory transparently from .NET assembly
我正在评估为本机应用程序实现插件基础结构的可能性,该基础结构允许用托管代码编写扩展。这些插件将在本机堆上分配的大型浮点缓冲区上运行,这些浮点缓冲区在复制内存占用方面相当昂贵。因此,插件应该能够直接在本机内存上运行。
据我了解,可以使用不安全代码和指针从托管代码访问本机内存(据我了解,这是 .NET 框架中唯一这样做的规定(。为了简化插件的开发,我宁愿不公开此工件并提供代理机制,以便可以像托管集合一样访问缓冲区。
对于实现(例如,C++/CLI 互操作层就可以(或特定的 .NET 运行时版本没有任何限制。可以假定缓冲区的大小也是固定的;该插件将仅修改内容。
是否有可能实施满足上述要求的基础架构,如果是,存在哪些选项?
您无法是否有可能实施满足上述要求的基础架构,如果是,存在哪些选项?
直接将本机数据视为托管数组,但可以通过 C++/CLI 公开一个层,该层允许对该内存进行直接、可索引的访问。
例如,假设您有一个由几百万个双精度浮点值组成的缓冲区。 您可以轻松地制作一个 C++/CLI ref class
,通过索引器在该缓冲区上公开一个窗口,甚至更好,作为IList<T>
。
这可能会允许它像普通IList<T>
一样从 C# 使用,而无需复制数据,因为包装类只需要存储缓冲区内存位置。
相关文章:
- 从C++本机插件更新Vector3数组
- GCC本机矩阵运算库
- VC++本机单元测试,找不到调试符号
- 在这种情况下,java对象是否可以调用本机函数
- PC中的程序和PHONE中的本机描述应用程序之间的数据连接
- Java 本机访问代码错误:"Invalid memory access"
- 如何在Android中从本机编译的c ++二进制文件访问相机
- 附加到 C++/CLI dll 的性能探查器无法访问本机C++代码
- C#访问本机C DLL
- 使用JNI访问外部本机功能
- 使用JNI从Java调用本机(C++)函数时发生访问冲突:这是我的代码问题,还是已知问题
- 在本机中访问 MAT 像素
- 如何访问本机IdataObject
- 使本机代码访问java方法和数据成员
- 如何防止C++或本机编译代码中的I/O访问
- 本机客户端的 SQL 大容量复制会导致访问冲突
- 通过静态变量从本机代码访问有状态托管对象
- 从 .NET 程序集透明地访问本机内存
- 无法对libhydro.dll运行java本机访问
- 是否可以使用C++(本机)访问TFS API