我一直在努力寻找一种在C#和Java之间传递数据的快速/高效方式。
到目前为止,我最初和独特的方法是使用JNIEnv。
Java类Adder的简单测试用例:
void add(float[] arr1, float[] arr2, float[] res)
{
for (int i=0; i<arr1.length; i++)
{
res[i] = arr1[i]+arr2[i];
}
}
在C#方面:
public void Add(float[] arr1, float[] arr2, float[] res)
{
var methodHandle = JNIEnv.GetMethodID(class_ref, "add","([F[F[F)V");
IntPtr arr1Handle = JNIEnv.NewArray(arr1);
IntPtr arr2Handle = JNIEnv.NewArray(arr2);
IntPtr resHandle = JNIEnv.NewArray(res);
JNIEnv.CopyArray (arr1, arr1Handle);
JNIEnv.CopyArray (arr2, arr2Handle);
JNIEnv.CallVoidMethod(Handle, methodHandle, new JValue(arr1Handle), new JValue(arr2Handle), new JValue(resHandle));
JNIEnv.CopyArray (resHandle, res);
}
对于相同的物理设备:对于大小为1百万的float []数组,在c#中分析这个Add()方法可以保存200-500毫秒之间的值!请注意,如果我在Android原生Eclipse项目中运行相同的测试,则对该函数的调用需要20-50ms。
如果您需要处理大量数据,如图像,矩阵,以满足实时要求......那么这就变得无法使用了。
任何人都可以建议另一种方法将数据绑定到Java或JNIEnv中的其他方法吗?
感谢您的时间。