通过JNI传递数据数组的最快方法是什么
What is the fastest way to pass data arrays through the JNI?
我正在使用Oboe的本地代码开发一个Android应用程序。我在c++端生成数据,并需要将该数据绘制到自定义视图中。我还根据这些数据生成了Oboe的数据。
我也可以在Java端生成数据并将其传递给c++,然后从那里生成Oboe数据。这个应用程序不是实时的,但我想避免滞后。
我目前正在使用Set*ArrayRegion((将数据传递给Java,但这会复制数据。我真的只需要一个对数组的引用就可以对数据进行读取访问。NewDirectByteBuffer((会给我这样的访问权限吗?我需要访问数据以将其绘制到屏幕上,然后我可以取消引用。这行吗?还是我需要复制数组?阵列可以是从几千个元素以下到100000个元素以上的任何地方。1000-100000个元素可能是平均值。我担心表现。
使用Get*ArrayElements((将数据传递到c++会更快吗?医生说可以复制。我可以将数据传递给c++并从中生成双簧管数据。
似乎除非我使用NewDirectByteBuffer((,否则我最终会得到两个数据副本。这行得通吗?如果不行,Java到c++,或者c++到Java会更快吗?
首先,测量是否可以使用副本(通过Set*ArrayRegion(。这是迄今为止最简单的架构。
如果不能,Java和C++之间共享的直接字节缓冲区确实是最佳解决方案。请记住,创建直接字节缓冲区可能会很昂贵,所以尽量重用字节缓冲区(即保留一个池(,而不是创建新的字节缓冲区。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- 在 c++ 中拥有一组结构的正确方法是什么?
- 通过JNI传递数据数组的最快方法是什么
- 用常见虚拟函数实现的任意组合来实现派生类的正确方法是什么
- 使用不同的CRT将新的C++代码与旧的(二进制)组件隔离开来的最佳方法是什么
- 当无法使用模板和宏时,生成类型变体C++代码的最简单方法是什么?
- 在另一个类视图中添加最多2个图表的正确方法是什么
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 在C++中包含原型文件的正确方法是什么?
- 在 OpenCV C++ 中估计基本矩阵之前对相应点进行归一化的正确方法是什么?
- 在PostgreSQL中根据它们的ID选择大量行的最快方法是什么?
- 在OSX上使用CMake将Adobe的XMP工具包构建为共享库的最简单方法是什么?
- 将一系列整数放入类的最佳方法是什么?
- 从长整整转换为uint64_t的推荐方法是什么?
- 将此布尔值传递给此函数的最有效方法是什么?
- 通过比较C++中的行在 txt 文件中搜索的最简单方法是什么?