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

call_native有性能问题,需要优化 #219

Open
w4454962 opened this issue Apr 19, 2023 · 3 comments
Open

call_native有性能问题,需要优化 #219

w4454962 opened this issue Apr 19, 2023 · 3 comments

Comments

@w4454962
Copy link

w4454962 commented Apr 19, 2023

在高频率执行native函数时 测试下来性能不佳,

call_param类使用了 3个vector 每次调用时,即使是局部变量 也都会从堆里动态申请内存 再回收,造成性能性能问题,应该改为栈内存 避免分配回收。

image

尤其是lua引擎里 会大量使用, 所以提一下可以注意优化。

@w4454962
Copy link
Author

我忽然发现为什么当年 小汐说lua的性能不如jass的原因了, 实在是因为ydlua引擎底层交互有问题

还有一些地方需要优化

1 每次访问 jass.common jass.japi 都会生成新的闭包 造成性能问题

2 调用 is_gaming() get_jass_thread() get_jass_vm() 等函数里 都 依赖了 get_war3_searcher() 里面的单例对象
单例对象使用静态局部变量 为了保证线程安全每次调用时都会从tls获取数据,高频率调用时会掉帧

3 lua调用native函数 是先将 参数 写入到容器里 再从 容器复制到栈里 一方面容器是堆内存 有分配回收问题,一方面对比jass虚拟机指令,多了一次参数复制的操作, 调用可以不需要容器 不需要参数复制 直接push 到栈里会快很多。

@actboy168
Copy link
Owner

lua的优点是可以大幅度的减少native函数的调用。用得好肯定没问题,用得不好怎么着都是问题。

@w4454962
Copy link
Author

我最近在重写替换jass虚拟机指令, 过程中用到你部分代码,反应出来性能比原本魔兽的要差一些,处理完上述问题,性能就达到相近的性能, 所以反馈一下而已。

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

No branches or pull requests

2 participants