Hello,
I have no real way to test it, but the tests I could do throw that these methods make a copy of the lists, so there's a lot of garbage created when calling them. It would be so great to have a way to access these methods without making in-memory copies, or at least an iterator that doesn't make a copy. There's a huge difference in performance and they are really needed for some operations.
Thank you so much!
user.getJoinedRooms() and room.getUserList() performance
-
- Posts: 12
- Joined: 12 Jul 2018, 08:38
Re: user.getJoinedRooms() and room.getUserList() performance
Are you talking about SmartFoxServer 2X? Because this was posted under the SFS 1.x section.
Exposing the server's internal state directly is never correct, even in the face of performance optimization which in this case would be close to insignificant. When you're copying a list you're copying references, so the load on the GC is negligible in the grand scheme of things (i.e. the rest of the server activity).
Cheers
Exposing the server's internal state directly is never correct, even in the face of performance optimization which in this case would be close to insignificant. When you're copying a list you're copying references, so the load on the GC is negligible in the grand scheme of things (i.e. the rest of the server activity).
Cheers
-
- Posts: 12
- Joined: 12 Jul 2018, 08:38
Re: user.getJoinedRooms() and room.getUserList() performance
Yes, this was for SFS 2X, I'm sorry for posting it on the wrong forum.
I am expert on optimization and this is not near close to insignificant. You can't know the cases this could be used for. That's why I wrote about the iterator, which would allow to iterate without the memory copy. I'll need to maintain my own class with lists or dictionaries to avoid the huge garbage collections this would lead to, so I asked for these methods to help other developers in the future.
Thank you for your reply!
I am expert on optimization and this is not near close to insignificant. You can't know the cases this could be used for. That's why I wrote about the iterator, which would allow to iterate without the memory copy. I'll need to maintain my own class with lists or dictionaries to avoid the huge garbage collections this would lead to, so I asked for these methods to help other developers in the future.
Thank you for your reply!
Re: user.getJoinedRooms() and room.getUserList() performance
You can't know the cases this could be used for.
All I can say is this:
We have tested SmartFoxServer for over 15 years under all kinds of conditions and we have followed hundreds of large deployments of SFS2X and I can tell you that excessive garbage collection or memory pressure (due to SFS2X list copying) has never been an issue even with 100K+ connections on a single machine and traffic in the range of 10Gbp/s.
That's why I wrote about the iterator, which would allow to iterate without the memory copy.
Iterators are as problematic as exposing the data structure itself, as they are not thread safe and they allow direct manipulation of the data.
I'll need to maintain my own class with lists or dictionaries to avoid the huge garbage collections this would lead to
Do you actually have real data to back this up?
I ask because a modern JVM running on any decent hardware (e.g. a recent Intel server CPU with 4-8GB of RAM) can handle millions of reference copies without batting an eyelid. And the resulting garbage collection will not spike your CPU.
About User.getJoinedRooms(): how many Rooms do you expect your User to join at the same time? How is this possibly a problem?
Return to “Server Side Extension Development”
Who is online
Users browsing this forum: No registered users and 51 guests