I'm having huge performance issues when I add RMI proxy references to a Java Swing JList-component.
I'm retrieving a list of user Profile
s with RMI from a server. The retrieval itself takes just a second or so, so that's acceptable under the circumstances. However, when I try to add these proxies to a JList
, with the help of a custom ListModel
and a CellRenderer
, it takes between 30-60 seconds to add about 180 objects. Since it is a list of users' names, it's preferrable to present them alphabetically.
The biggest performance hit is when I sort the elements as they get added to the ListModel. Since the list will always be sorted, I opted to use the built-in Collections.binarySearch()
to find the correct position for the next element to be added, and the comparator uses two methods that are defined by the Profile
interface, namely getFirstName()
and getLastName()
.
Is there any way to speed this process up, or am I simply implementing it the wrong way? Or is this a "feature" of RMI? I'd really love to be able to cache some of the data of the remote objects locally, to minimize the remote method calls.
Update and possible solution: I created local classes that implements the remote interfaces and contains a reference to the remote objects. The speed enhancement is noticeable and it now works seemlessly (at least so far). I hope this works equally as well for the other interfaces we use in our application. Thanks for the input that I think helped guide me.