3

我不确定这是否可能,我对 c# 中的编组了解不多,所以如果我很遥远,或者这是否可能,请填写我对这一点的理解。

但基本上我在基于 C# 的应用程序中有一个 C# 中的浮点数组。每次这个程序循环时,我都需要在这个浮点数组上做一些处理器密集型的繁重工作。所以我想用 C 编写这个处理器繁重的代码,然后将浮点数组编组到 C 并在 C 中处理编辑。这看起来很简单,但问题是我的 C# 代码需要立即访问浮点数组在 C 中编辑。

我遇到的问题是编组的开销。在编组过程中,性能上的任何收益都会丢失。如果我必须将这个浮点数组从 C# 编组到 C,然后在该程序的每个周期从 C 回到 C#,则不会有任何性能提升。

有什么方法可以让我制作一个浮点数组并将指向该数组的指针编组到 C 中,并在 C 中编辑该数组。但也能够使用来自 C# 的相同精确指针立即引用该数组并查看什么数组中的 C 代码已更改?那么我不必在每个周期来回编组数组吗?

4

1 回答 1

0

您可以使用固定块。这将防止垃圾收集器在内存中移动数组。因此,您将获得一个指向您可以使用的托管数组的原始指针。将原始指针传递给您的 C 代码。无需复制:C 代码将直接对托管数组进行操作。一旦固定块超出范围,就不要保留原始指针,否则您可能会在 GC 运行后持有错误的指针。

例子:

int[] arr;
// NOT SHOWN:  initialize arr array
fixed (int* p = arr) {
    // NOT SHOWN:  call C function, passing "p" pointer
}
于 2012-08-06T21:30:37.013 回答