[专栏作家] 使用xlua读取lua数据表性能分析

Posted 游戏蛮牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[专栏作家] 使用xlua读取lua数据表性能分析相关的知识,希望对你有一定的参考价值。

使用xlua读取lua策划数据表性能分析

使用的lua表

[专栏作家] 使用xlua读取lua数据表性能分析

1


[专栏作家] 使用xlua读取lua数据表性能分析

[专栏作家] 使用xlua读取lua数据表性能分析[专栏作家] 使用xlua读取lua数据表性能分析


试代码


[专栏作家] 使用xlua读取lua数据表性能分析

[专栏作家] 使用xlua读取lua数据表性能分析[专栏作家] 使用xlua读取lua数据表性能分析[专栏作家] 使用xlua读取lua数据表性能分析[专栏作家] 使用xlua读取lua数据表性能分析


Table对应数据Class


[专栏作家] 使用xlua读取lua数据表性能分析[专栏作家] 使用xlua读取lua数据表性能分析[专栏作家] 使用xlua读取lua数据表性能分析

[专栏作家] 使用xlua读取lua数据表性能分析

2


1.第一次DoString开销比较大,主要在File的操作。解决方案:所有lua文件做成大文件,File的open操作打开一次,持有句柄。(test===1)


2.重复Get已经DoString的表仍然有1K的GC,主要在LuaTable.Get操作里。解决方案:在LuaDataInfo里有个Marshal,用来序列化数据,并且能保证只Get一次表。每个表有一个static的表名和LuaTable对表的引用。(test===2)


3.重复获取同一个index的子表,GC开销较大,主要在Activator.CreateInstance里。解决方案:缓存已经读取的子表,每次先从字典里查找,找到直接返回,找不到再走整个读取流程(test===4~8)


4.返回缓存的子表,GC仍然不可忽略,60B。由于我使用的是type的name做key,所以会有一个字符串60B的开销,后面直接用type做key,可以省略这部分开销,但是时间略有消耗


3


优化点:


1.分表,将大的数据表分成多个

2.读取表的时候,按字段读取,而不是一次性解析整条数据
3.预加载一些道具、活动、任务表
4.注意缓存表的内存占用
5.注意lua堆栈



以上是关于[专栏作家] 使用xlua读取lua数据表性能分析的主要内容,如果未能解决你的问题,请参考以下文章

[专栏日更]219 | Lua编程1之初识

[专栏作家]Lua表结构描述和数据版本

[专栏作家] Lua中的消息分发实现

[专栏作家] Lua写UI的一些使用心得

深入xLua实现原理之C#如何调用Lua

XLua 入门之 C# 访问 Lua