czastack / RszTool

RszTool is a tool that edit and create resource file for RE ENGINE game. Currently support .user, .pfb and .scn files.
14 stars 3 forks source link

Use a dictionary to speed up RszInstanceList.IndexOf #11

Open IntelOrca opened 4 months ago

IntelOrca commented 4 months ago

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 commented 4 months ago

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

IntelOrca commented 4 months ago

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