我正在通过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互操作。