Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use a dictionary to speed up RszInstanceList.IndexOf #11

Open
wants to merge 3 commits into
base: master
Choose a base branch
from

Conversation

IntelOrca
Copy link

@IntelOrca IntelOrca commented Apr 8, 2024

I don't think this should be merged. Rather I just wanted to make aware, a very inefficient part of the code, that caused saving a file to take a very long time, if many new game objects were added.

For context, I was programatically taking a file with many enemy spawns and duplicating them around 5 times and saving the file.
This caused an o(n²) search to occur with thousands of calls to IndexOf in FixInstanceIndex.

As a quick work around, I swapped the List with a new class that wraps a list but also keeps a dictionary mapping the instances to their index in the list. This changed saving every area file from 30 second process down to near instant.

Ideally someone with better knowledge of the code should optimise the algorithm here so that it isn't doing so many searches through list which can have 300K items.

@czastack
Copy link
Owner

czastack commented Apr 8, 2024

Can you provide your game file? I would do some test.

@IntelOrca
Copy link
Author

IntelOrca commented Apr 8, 2024

I can't remember which file was one of the worst offenders. I'll will try and find it again with some example code.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants