如何避免在VBA和C#之间进行昂贵的数组编组?

问题描述 投票:0回答:1

我正在通过COM导出此C#方法:

public interface IMatrixMath {
    void AddScaledRange3D(ref double[,,] acc, [In] ref double[,,] vals, double scale);
    // ...
}

然后我用Excel中的VBA用大型矩阵来称呼它:

Dim A(0 To 2000, 0 To 120, 0 To 500) As Double
Dim B(0 To 2000, 0 To 120, 0 To 500) As Double
' ...
MatrixMath.AddScaledRange3D A, B, 0.4

这大约需要15秒,但是在C#中仅花费了1秒钟的时间。大多数情况是进入C#方法的开销[[之前。

我不确定开销来自何处。如果Excel需要封送至SAFEARRAY,也不需要封送吗?为什么还要花这么长时间,Excel不能连续存储数组?可能与跨越某些COM边界有关吗?

是否有解决此开销的方法?我不介意处理原始指针或非COM互操作。

c# excel vba com marshalling
1个回答
-5
投票
感谢for info。它将帮助每个人了解在VBA和C#之间编组的昂贵数组
© www.soinside.com 2019 - 2024. All rights reserved.