1

我一直在努力寻找一种在 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);
}

对于相同的物理设备:对于大小为 100 万的 float[] 数组,在 c# 中分析此 Add() 方法的值在 200-500 毫秒之间!请注意,如果我在 Android 原生 Eclipse 项目中运行相同的测试,则调用该函数需要 20-50 毫秒。

如果您需要处理大量数据(如图像、矩阵)以满足实时要求……那么这将变得不可用。

谁能建议将数据绑定到 Java 的另一种方法或 JNIEnv 中的另一种方法?

感谢您的时间。

4

0 回答 0