我有一些代码在10.919秒运行。分析它显示10.182 s被浪费在
opaque.double
使用
时调用jClass.GetArrays(jArray1,jArray2);
struct.prop1 = double(jArray1);
struct.prop2 = double(jArray1);
可以做些什么?我必须使用Java与外部API进行交互。
编辑:我使用了以下黑客:
struct.prop1 = cell2mat( cell( jArray1) );
并降至1.5秒/ 2.2秒
编辑:
使java返回长逗号分隔数组的字符串表示,然后使用
data = strread(char(jString),'%f','delimiter',',' );
产生了几乎可以忍受的表现
答案 0 :(得分:3)
在这种情况下,问题在于使用盒装Java原语 - java.lang.Double 。
简单地将Java的签名从Double更改为double会导致Matlab无缝地使用数组而不会产生额外的开销。
答案 1 :(得分:1)
您可以考虑将其保存到文件中,然后在另一端读取它。它也可能同样很慢(特别是如果涉及网络),但它值得一试。
您也可以考虑将其转换为二进制数据blob,然后传递它,然后将其转换回来。
我有一种潜在的怀疑,即表现不佳,它会在自己的交易中传递数组的每个元素,而不是一次性传递。
- 亚当