2009-02-02 1 views
3

У меня есть код, который работает в 10.919 с. Профилирование это показывает, что 10.182 s растрачиваются вПередача миллиона чисел от java до matlab?

opaque.double 

Что называется, когда я использую

jClass.GetArrays(jArray1,jArray2); 

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

Что можно сделать? Я должен использовать Java для взаимодействия с внешним API.


EDIT: Я использовал следующий хак:

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


И получил вниз к 1.5s/2.2s

EDIT:

делая яву вернуть длинную запятую строковое представление массивов, а затем с использованием

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

Произведено почти сносная производительность

ответ

1

Вы могли бы рассмотреть его сохранение в файл, а затем читать его в на другом конце. Это также может быть так же медленным (особенно если речь идет о сети), но это стоит того.

Вы также можете рассмотреть возможность преобразования его в кусок двоичных данных, затем передать его и преобразовать обратно.

У меня есть подозрительное подозрение, что с этим плохим исполнением он передает каждый элемент массива в своей собственной транзакции, а не сразу.

-Adam

3

Проблема лежит в использовании коробочных Java примитивов - java.lang.Double в этом случае.

Простое изменение сигнатуры Java от Double до Double заставляет Matlab плавно работать с массивом без накладных расходов.

 Смежные вопросы

  • Нет связанных вопросов^_^