Skip to content

Use a dictionary to speed up RszInstanceList.IndexOf#11

Open
IntelOrca wants to merge 5 commits into
czastack:masterfrom
IntelOrca:biorand/v0.2.2
Open

Use a dictionary to speed up RszInstanceList.IndexOf#11
IntelOrca wants to merge 5 commits into
czastack:masterfrom
IntelOrca:biorand/v0.2.2

Conversation

@IntelOrca

@IntelOrca IntelOrca commented Apr 8, 2024

Copy link
Copy Markdown

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

czastack commented Apr 8, 2024

Copy link
Copy Markdown
Owner

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

@IntelOrca

IntelOrca commented Apr 8, 2024

Copy link
Copy Markdown
Author

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