Skip to content

Conversation

@RoosterDragon
Copy link

This is a combination of a couple of PRs I submitted to the OpenRA fork already. OpenRA#1, OpenRA#2.

This fixes a missing SuppressFinalize call, and implements caching of the MetamethodAttribute lookup. This lookup is extremely expensive. Most of our calls tend to marshal custom objects - I found without these changes we were spending more time just repeating this reflection call than we were actually spending invoking Lua code. Caching this provides a nice performance boost to calls involving custom objects.

This missing call meant even if the caller took care to dispose a LuaReference it was still being finalized. Adding this call prevents this needless finalization from taking place.
This allows us to speed up LuaRuntime.PushCustomClrObject when pushing an object multiple times since we can do this costly reflection on construction on the object and retain it thereafter.

Calling code that uses LuaTransparentClrObject benefits since we can cache this information for the proxy type. It can also benefit calling code that is able to reuse a LuaCustomClrObject instance across multiple Lua calls.
This reflection is expensive, so by allowing it to be cached against each runtime we can remove most of the cost. Since each runtime is likely to only deal with a handful of custom objects, it shouldn't be an issue for memory usage.
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.

1 participant