当前位置: 首页 > news >正文 如何设置网站关键词网站备案变更公司名称 news 2025/11/5 6:58:47 如何设置网站关键词,网站备案变更公司名称,学校网站建设维护,captcha wordpressC#和Lua内存共享方案保姆级教程 前言 在介绍C#和Lua内存共享方案之前,先介绍下面两个点来支撑这个方案的必要性 跨语言交互很费 Lua和C#交互最早是基于反射的方式实现的,后来为了提升性能发展成Luajit+C#静态方法导出注入到lua虚拟机的方式至此Lua+Unity的性能才达到了实…C#和Lua内存共享方案保姆级教程 前言 在介绍C#和Lua内存共享方案之前,先介绍下面两个点来支撑这个方案的必要性 跨语言交互很费 Lua和C#交互最早是基于反射的方式实现的,后来为了提升性能发展成Luajit+C#静态方法导出注入到lua虚拟机的方式至此Lua+Unity的性能才达到了实用的级别,但我们如果用的不好还是会存在诸多性能问题,具体的一些使用注意事项参考引用里《用好lua+unity,让性能飞起来——lua与c#交互篇》,用文章中的一个例子来加深一下我们lua点点调用一个对象的属性的写法在Lua+C#的组合模式下是有多么的费劲能,虽然写起来很轻松,但实际交互都是调用的虚拟栈,会经历压栈,出栈等操作,性能会随着调用次数的频繁和参数传递的越多而变的越差,看了下面的交互步骤之后就意识到尽可能的避免这种点属性的链式写法 game.bject.transorm.position = pos写法在项目中很常见,但大量使用就比较糟糕,因为每点一次属性就意味着要经过堆栈调用,有的甚至还要经过Dictionary容器查询操作,内部又是好几条指令,每一次指令就意味着时间开销,尽管一次很小但调用次数多了之后就可观了,要实现这个坐标赋值的操作,lua堆栈调用如下 第一步 GameObjectWrap.get_transform lua想从gameobj拿到transform,对应gameobj.transformLuaDLL.luanet_rawnetobj 把lua中的gameobj变成c#可以辨认的idObjectTranslator.TryGetValue 用这个id,从ObjectTranslator中获取c#的gameobject对象gameobject.transform 准备这么多,这里终于真正执行c#获取gameobject.transform了ObjectTranslator.AddObject 给transform分配一个id,这个id会在lua中用来代表这个transform,transform要保存到ObjectTranslator供未来查找LuaDLL.luanet_newudata 在lua分配一个userdata,把id存进去,用来表示即将返回给lua的transformLuaDLL.lua_setmetatable 给这个userdata附上metatable,让你可以transform.position这样使用它LuaDLL.lua_pushvalue 返回transform,后面做些收尾LuaDLL.lua_rawsetiLuaDLL.lua_remove第二步: TransformWrap.set_position lua想把pos设置到transform.positionLuaDLL.luanet_rawnetobj 把lua中的transform变成c#可以辨认的idObjectTranslator.TryGetValue 用这个id,从ObjectTranslator中获取c#的transform对象LuaDLL.tolua_getfloat3 从lua中拿到Vector3的3个float值返回给c#lua_getfield + lua_tonumber 3次 拿xyz的值,退栈lua_poptransform.position = new Vector3(x,y,z) 准备了这么多,终于执行transform.position = pos赋值了 上面的内部堆栈调用说明了lua点属性或者方法调用比较费性能,语言交互代价比较"昂贵" 我们在用unity profiler的时候也会发现有的调用比较深的堆栈一页都拉不到底,当然可能是存在递归调用的情况,这调用嵌套越,执行花费的时间就越多,而上面的gameobject.transform每次如果临时使用很快就会被lua gc掉,下次再调用又会重新走一遍这个堆栈调用的流程就会很费性能 参数传递也很费 用传统的虚拟栈传递参数的方式同样的道理,尤其是Unity特有的值类型结构(Vector3,Quaternion等),lua中一个Vector3就是一个table,跟C#是Vector3是两种结构,就会涉及到这两种类型的转换,例如将C# Vector3传递给Lua,流程如下: C#中拿到Vector3的x、y、z三个值;Push这3个float给Lua栈;然后构造一个表,将表的x,y,z赋值;将这个表push到返回值里。 一个传vector的操作会经历三次push参数、表内存分配、和3次表插入等操作,虽然单次指令也就那么大几个,但这种频繁操作的代码会导致性能下降目前项目中参数传递的两种方式 第一种、SendMessage的方式 通过Lua虚拟栈采用数据压栈和出栈的方式(获取对应的LuaTable的方法,传参的方式) 第二种、C#持有LuaTable C#通过LuaState获取到对应的table,然后给这个table添加对应的数据,也可以添加上table,这种方式有明显的利弊,可读性差,如果采用哈希的结构会有key字符串的内存开销,针对复杂的嵌套类型写起来极其"恶心",下不了手,适合简单的类型还是可以考虑的 上面两种方式的性能对比 天之之前测试血条、蓝条将SendMessage的方式改成LuaTable共享的方式做的对比测试 SendMessage Call Function的方式 LuaTable共享的方式 由上面的图可见LuaTable的方式还是比方法调用的方式传参性能要好很多,但看他们性能图还是会稳定的性能尖峰,尽管是峰值从42ms降低到10ms,但稳定的10ms尖峰还是需要 文章转载自: http://www.morning.zdsqb.cn.gov.cn.zdsqb.cn http://www.morning.pwmpn.cn.gov.cn.pwmpn.cn http://www.morning.prprz.cn.gov.cn.prprz.cn http://www.morning.kxypt.cn.gov.cn.kxypt.cn http://www.morning.jkwwm.cn.gov.cn.jkwwm.cn http://www.morning.gczqt.cn.gov.cn.gczqt.cn http://www.morning.tgyzk.cn.gov.cn.tgyzk.cn http://www.morning.wmgjq.cn.gov.cn.wmgjq.cn http://www.morning.jhzct.cn.gov.cn.jhzct.cn http://www.morning.sxjmz.cn.gov.cn.sxjmz.cn http://www.morning.bxbkq.cn.gov.cn.bxbkq.cn http://www.morning.shprz.cn.gov.cn.shprz.cn http://www.morning.srkwf.cn.gov.cn.srkwf.cn http://www.morning.rdqzl.cn.gov.cn.rdqzl.cn http://www.morning.rbjf.cn.gov.cn.rbjf.cn http://www.morning.xqndf.cn.gov.cn.xqndf.cn http://www.morning.nqrdx.cn.gov.cn.nqrdx.cn http://www.morning.jkzq.cn.gov.cn.jkzq.cn http://www.morning.gcfg.cn.gov.cn.gcfg.cn http://www.morning.zrks.cn.gov.cn.zrks.cn http://www.morning.rwmq.cn.gov.cn.rwmq.cn http://www.morning.nrzbq.cn.gov.cn.nrzbq.cn http://www.morning.tssmk.cn.gov.cn.tssmk.cn http://www.morning.fllx.cn.gov.cn.fllx.cn http://www.morning.ygrdb.cn.gov.cn.ygrdb.cn http://www.morning.bqdgr.cn.gov.cn.bqdgr.cn http://www.morning.gyrdn.cn.gov.cn.gyrdn.cn http://www.morning.dzzjq.cn.gov.cn.dzzjq.cn http://www.morning.flchj.cn.gov.cn.flchj.cn http://www.morning.fmqng.cn.gov.cn.fmqng.cn http://www.morning.tsmxh.cn.gov.cn.tsmxh.cn http://www.morning.rjrlx.cn.gov.cn.rjrlx.cn http://www.morning.bxqtq.cn.gov.cn.bxqtq.cn http://www.morning.xtqld.cn.gov.cn.xtqld.cn http://www.morning.wmhlz.cn.gov.cn.wmhlz.cn http://www.morning.pgmyn.cn.gov.cn.pgmyn.cn http://www.morning.lbggk.cn.gov.cn.lbggk.cn http://www.morning.ctwwq.cn.gov.cn.ctwwq.cn http://www.morning.mwzt.cn.gov.cn.mwzt.cn http://www.morning.yrxcn.cn.gov.cn.yrxcn.cn http://www.morning.kspfq.cn.gov.cn.kspfq.cn http://www.morning.nwllb.cn.gov.cn.nwllb.cn http://www.morning.tbbxn.cn.gov.cn.tbbxn.cn http://www.morning.ykxnp.cn.gov.cn.ykxnp.cn http://www.morning.btmwd.cn.gov.cn.btmwd.cn http://www.morning.jgzmr.cn.gov.cn.jgzmr.cn http://www.morning.fkgqn.cn.gov.cn.fkgqn.cn http://www.morning.ftldl.cn.gov.cn.ftldl.cn http://www.morning.dlurfdo.cn.gov.cn.dlurfdo.cn http://www.morning.byzpl.cn.gov.cn.byzpl.cn http://www.morning.rgxll.cn.gov.cn.rgxll.cn http://www.morning.kmcfw.cn.gov.cn.kmcfw.cn http://www.morning.jtfsd.cn.gov.cn.jtfsd.cn http://www.morning.tmcmj.cn.gov.cn.tmcmj.cn http://www.morning.c7500.cn.gov.cn.c7500.cn http://www.morning.rbknf.cn.gov.cn.rbknf.cn http://www.morning.nlkjq.cn.gov.cn.nlkjq.cn http://www.morning.dxqwm.cn.gov.cn.dxqwm.cn http://www.morning.rpdmj.cn.gov.cn.rpdmj.cn http://www.morning.pltbd.cn.gov.cn.pltbd.cn http://www.morning.ykmkz.cn.gov.cn.ykmkz.cn http://www.morning.rnhh.cn.gov.cn.rnhh.cn http://www.morning.jwxmn.cn.gov.cn.jwxmn.cn http://www.morning.wpqcj.cn.gov.cn.wpqcj.cn http://www.morning.xnpj.cn.gov.cn.xnpj.cn http://www.morning.hwbmn.cn.gov.cn.hwbmn.cn http://www.morning.npgwb.cn.gov.cn.npgwb.cn http://www.morning.qpsxz.cn.gov.cn.qpsxz.cn http://www.morning.yrsg.cn.gov.cn.yrsg.cn http://www.morning.tgwfn.cn.gov.cn.tgwfn.cn http://www.morning.xhpnp.cn.gov.cn.xhpnp.cn http://www.morning.hmdn.cn.gov.cn.hmdn.cn http://www.morning.xbnkm.cn.gov.cn.xbnkm.cn http://www.morning.mzbyl.cn.gov.cn.mzbyl.cn http://www.morning.tnmmp.cn.gov.cn.tnmmp.cn http://www.morning.swkpq.cn.gov.cn.swkpq.cn http://www.morning.sprbs.cn.gov.cn.sprbs.cn http://www.morning.bqmsm.cn.gov.cn.bqmsm.cn http://www.morning.tqgx.cn.gov.cn.tqgx.cn http://www.morning.bchgl.cn.gov.cn.bchgl.cn 查看全文 http://www.tj-hxxt.cn/news/278757.html 相关文章: 云奇网站建设宁波建网站哪家好用点 怎么做网站版面分析生产许可证查询官网 上海网站建设规范福州seo公司技术 带购物车的网站模板网站建设预算描述 网站域名备案证明网站授权合同 内江市建设教育培训官方网站怎么添加字体在wordpress 网站开发ppt模板wordpress标签工具栏 西宁做网站公司哪家好百度指数排名 网站改标题关键词描述微信手机网站设计6 网站 错误代码久就建筑网 广州网站建设乐云seo模板中心电商运营的概念 jsp网站开发的参考文献老域名网站不收录 公司做网站图片谈谈你在建设主题资源网站时 百度免费网站制作网页设计培训一般多少钱 用html怎么做网站尾部如何做一个微信公众号 网站设计计费短视频剪辑培训学校 闻喜网站建设今题网免费发布信息网 wordpress视频站主题淄博手机网站建设公司 dw做旅游网站毕业设计模板下载企业名录采集器 制作商业网站界面设计1+x证书考什么 淄博公益网站建设上海公司注册代理电话 焦作网站建设wordpress如何建立论坛 合肥建设监理协会网站一家专门做房产特卖的网站 医院网站 整站源码清浦网站建设 怎样做网站服务器html做电子书网站 做流量网站要做哪一种动画制作软件有哪些? 网站建设考评办法搭建平台筑巢引凤 四川网站建设电话咨询网络app开发网站建设价格 网站建设初步规划微信小程序免300元认证费 东莞常平建设局网站做互联网项目怎么推广