mush访问table、DSN的access、SQLite速度比较
最近看一下mush,把地图分别做成了lua table,sqlite和access格式,通过查询房间名获取房间编码,比较了了一下速度,三种方式的速度都很快,但最快的是lua的table,大概有2%的概率为0.0140左右;sqlite有6%的概率为0.0140秒,access有10%的概率为0.016秒,其余都是0秒,用os.clock()函数测。一共2800个房间。 楼主辛苦了,呵呵。LUA的table确是很有特点,努力学习中。ttk_00 原帖由 killunix 于 2010-5-11 01:00 AM 发表 http://pkuxkx.com/forum/images/common/back.gif
最近看一下mush,把地图分别做成了lua table,sqlite和access格式,通过查询房间名获取房间编码,比较了了一下速度,三种方式的速度都很快,但最快的是lua的table,大概有2%的概率为0.0140左右;sqlite有6%的概率为0 ...
能否知道这个地图是如何做出来的?特别是很多房间都有特定的走法。
能否给点hint? 原帖由 killunix 于 2010-5-11 01:00 AM 发表 http://pkuxkx.com/forum/images/common/back.gif
最快的是lua的table,大概有2%的概率为0.0140左右;sqlite有6%的概率为0.0140秒,
有点笔误吧,lua的table概率应该是12%?
文若终于提笔了,sqlite的中文问题解决了吗?说说心得经验吧。 table、sqlite、access 这三个做地图,各有优缺点,真是不好取舍。 用什么脚本做地图不重要,用什么算法来做才重要。ttk_15
[ 本帖最后由 kenzip 于 2010-5-11 03:25 PM 编辑 ] 原帖由 kenzip 于 2010-5-11 02:26 PM 发表 http://pkuxkx.com/forum/images/common/back.gif
用什么脚本做地图不重要,用什么算法来做才重要。ttk_15
不错。但算法大多是现成有的。实现方法也是比较重要的。用语言提供的feature做比较方便,效率确实问题;用数据库操作效率不错,但是大家知道,现在用的关系型数据库在逻辑思维上与程序员的OO、甚至是structural的思维都不符,还是会带来一些实现上的麻烦的。 确实我测下来,lua的table目前是最快的,是2%,不是12%。
http://pkuxkx.com/forum/viewthread.php?tid=11903&extra=page%3D&page=5看sauron的帖子,有地图格式,和计算路径算法。
目前来看,如果地图数据比较少,比如只有房间编码、出口、房间名称的话,luatable是最快的。我现在计算路径地图没有分区域,就一张大地图,原来还担心用luatable比较慢,所以搞了sqlite去select想快点。事实是lua完全能胜任。
sqlite好处是可以塞很多东西在里面,我现在放了房间编码、名称、同名房间编号、同名房间数量、房间描述、坐标、npc等。用来做task、挖金子啥的比较方便。
贴一个我的lua table地图格式:map={
={ roomid=1,roomname="西门",
roomcx=-1800,roomcy=0,
roomexistsdir={["w"]=507,["e"]=2,},
roomexistscost={["w"]=1,["e"]=1,},
},
={ roomid=2,roomname="西大街",
roomcx=-1380,roomcy=0,
roomexistsdir={["e"]=8,["s"]=4,["n"]=3,["w"]=1,},
roomexistscost={["e"]=1,["s"]=1,["n"]=1,["w"]=1,},
},
={ roomid=3,roomname="飞龙帮总部",
roomcx=-1380,roomcy=-480,
roomexistsdir={["s"]=2,},
roomexistscost={["s"]=1,},
},
={ roomid=4,roomname="红娘庄大门",
roomcx=-1380,roomcy=960,
roomexistsdir={["n"]=2,["e"]=5,},
roomexistscost={["n"]=1,["e"]=1,},
},
}
再贴一个sqlite地图信息:
[ 本帖最后由 killunix 于 2010-5-11 09:06 PM 编辑 ] 文若用的什么sqlite图形管理界面?我用的SQLiteSpy没你这个看上去漂亮。
我个人觉得,用sql地图数据,维护起来最简单方便,txt地图数据其次,而lua的地图数据维护起来最复杂。 SQLite ExpertPersonal Edition,很好用而且不要钱。
平时luatable应该不需要维护。我sqlite地图主要是用来定位,计算路径还是需要lua table格式的,sql语言好像不能用来计算。
sqlite还有个坏处是从数据库读出来的汉字如果是奇数个,那后面那个是显示不出来的,也就是当初vase说的那个问题。好在暂时不需要从数据库里读汉字。另外通过汉字查询sqlite数据库需要转码,可以利用ddid的那个转码dll来搞定。
页:
[1]
2