6

我正在评估为允许以托管代码编写扩展的本机应用程序实现插件基础结构的可能性。这些插件将在本地堆上分配的大型(-ish)浮点缓冲区上运行,这在复制内存占用方面相当昂贵。因此,插件应该能够直接在本机内存上进行操作。

据我了解,可以通过使用不安全代码和指针从托管代码访问本机内存(据我了解,这是 .NET 框架中唯一这样做的规定)。为了简化插件的开发,我宁愿不公开这个工件并提供代理机制,以便可以像托管集合一样访问缓冲区。

对于实现(例如,C++/CLI 互操作层很好)或特定的 .NET 运行时版本没有限制。缓冲区也可以假定为固定大小;该插件只会修改内容。

是否可以实施满足上述要求的基础设施,如果可以,有哪些选择?

4

1 回答 1

7

是否可以实施满足上述要求的基础设施,如果可以,有哪些选择?

您将无法直接将本机数据视为托管数组,但您可以通过 C++/CLI 公开一个层,该层允许直接、可索引地访问该内存。

例如,假设您有一个由几百万个双精度浮点值组成的缓冲区。您可以轻松创建一个 C++/CLI ref class,通过索引器将窗口公开到该缓冲区,甚至更好,作为IList<T>.

这可能允许在 C# 中使用它,就像它是普通的一样IList<T>,而无需复制数据,因为包装类只需要存储的缓冲内存位置。

于 2013-08-21T16:55:31.997 回答