3

我有一些在 10.919 秒内运行的代码。对其进行分析表明,10.182 秒被浪费在

opaque.double

当我使用时调用

jClass.GetArrays(jArray1,jArray2);

struct.prop1 = double(jArray1);
struct.prop2 = double(jArray1);

可以做什么?我必须使用 Java 与外部 API 进行交互。


编辑:我使用了以下技巧:

struct.prop1 = cell2mat( cell( jArray1) ); 


并下降到 1.5s / 2.2s

编辑:

使java返回数组的长逗号分隔字符串表示,然后使用

data = strread(char(jString),'%f','delimiter',',' );

产生几乎可以忍受的性能

4

2 回答 2

3

问题在于盒装 Java 原语的使用——在本例中为java.lang.Double 。

只需将 Java 的签名从 Double 更改为 double,Matlab 就可以无缝地处理数组,而无需转换开销。

于 2009-02-12T16:00:45.830 回答
1

您可能会考虑将其保存到文件中,然后在另一端读取它。它也可能同样慢(尤其是在涉及网络的情况下),但值得一试。

您还可以考虑将其转换为二进制数据块,然后传递它,然后再将其转换回来。

我有一个偷偷摸摸的怀疑,由于表现不佳,它会在自己的事务中传递数组的每个元素,而不是一次全部传递。

-亚当

于 2009-02-02T15:29:11.017 回答