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

Cache metamethods, finalize references #7

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

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