gpt4 book ai didi

c# - 从 .NET 程序集透明地访问 native 内存

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:27:46 26 4
gpt4 key购买 nike

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

据我所知,可以使用 Unsafe Code and Pointers 从托管代码访问 native 内存(据我了解,这是 .NET 框架中唯一这样做的条款)。为了简化插件的开发,我宁愿不公开这个工件,而是提供一个代理机制,以便可以像托管集合一样访问缓冲区。

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

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

最佳答案

Is it possible to implement an infrastructure that meets the requirements layed out above and if so, what options exist?

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

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

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

关于c# - 从 .NET 程序集透明地访问 native 内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18363319/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com