2013-09-19 3 views
0

Я пишу клиентское приложение сервера, лучшая производительность - обязательная; Я использую RMI для связи между сервером и клиентом, сервер использует базу данных mySQL.Оптимизация ответа службы RMI

Теперь на стороне клиента У меня есть метод, называемый

getLinks()  

, который вызывает тот же метод на сервере, проблема заключается в том, что этот метод возвращает около 700Mb данных, что занимает некоторое время, чтобы получить, и еще немного времени для анализа.

И тогда я устанавливаю некоторые значения для каждого Ссылка:

for (Link l : myService.getLinks()) l.setSelected(false); 

Что я имею в виду сейчас только получение Link Идентификаторы первый (так как это было бы меньшим данных), а затем, используя асинхронный метод для получения каждой ссылки по идентификатору (для каждой ссылки нужен один служебный вызов); а затем установите значения Link.

Это лучший подход, есть ли другой способ получения данных RMI по одному (один вызов метода и более одного возврата)?

Есть ли что-то вроде (yield return) in C#?

ответ

0

вы можете также сделать метод постраничной, который получают начальный идентификатор (или позиции, если идентификаторы не являются последовательными) и длину, таким образом, вы не будете посылать все идентификаторы дважды

+0

, пожалуйста, просмотрите мой комментарий @EJP, ссылки хранятся в HashMap (ссылках), которые необходимы во всем приложении. – TheO

0

Являются Ссылка объекты удаленных объектов? Если нет, я действительно не вижу смысла в коде, поскольку он только устанавливает что-то локально в объект клиента, который сразу же отбрасывается.

Предполагая, что это удаленные объекты, было бы лучше отправить все обновление на сервер и сообщить ему об обновлении всей коллекции, что-то вроде setLinksSelected (boolean), где сервер выполняет итерацию.

Но я также опасаюсь обновлять или даже переносить 700 миллионов данных через RMI, каким бы способом вы это ни делали. Это много данных.

+0

Объекты ссылки - это строки в таблице ссылок в базе данных, и они не выбрасываются; метод getLinks хранит все в HasMap (ссылки) и используется во всем приложении и уничтожается при выходе приложения. проблема заключается в первом вызове (getLinks), поскольку (ссылки == null) – TheO

+0

Итак, код, который вы отправили, не является реальным кодом? – EJP

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