3

10.919 秒で実行されるコードが少しあります。プロファイリングすると、10.182 秒が無駄になっていることがわかります

opaque.double

私が使用するときに呼び出される

jClass.GetArrays(jArray1,jArray2);

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

何ができるでしょうか?外部 API とやり取りするには、Java を使用する必要があります。


編集:次のハックを使用しました:

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


そして、1.5秒/ 2.2秒になりました

編集:

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

ファイルに保存してから、反対側で読み取ることを検討してください。同様に遅くなる可能性もありますが (特にネットワークが関係している場合)、試してみる価値はあります。

また、バイナリ データの blob に変換してから渡し、元に戻すことも検討してください。

私は、パフォーマンスが悪いため、配列の各要素を一度に渡すのではなく、独自のトランザクションで渡しているのではないかと疑っています。

-アダム

于 2009-02-02T15:29:11.017 に答える