找回密码
 点一下
查看: 1526|回复: 9

哈希表读取存储速度不够快耶。。。

[复制链接]
发表于 2010-12-26 20:25:08 | 显示全部楼层 |阅读模式
的确不太快,大概一百个计时器,每个计时器只是运行读取和储存,就会有点卡了,所以这里请问除了换个更好cpu之外,怎样提高存取速率?或者说存取速率跟什么有关,跟哈希表的引索有关?跟储存类型有关?那种类型被较快?
发表于 2010-12-26 21:21:10 | 显示全部楼层
话说……实际运用下一般是不可能有这种密度和数量的读取和存储的,而且卡也不一定是存储效率的关系
而且hashtable读取的时间复杂度是O(1)吧,也就是常数
回复

使用道具 举报

 楼主| 发表于 2010-12-26 22:56:43 | 显示全部楼层
local timer tm=GetExpiredTimer()
    local unit u=LUtm(tm,"u")
    local real x=GetUnitX(u)
    local real y=GetUnitY(u)
    local real t
    local location p
    local real speed
    local real x0=LRtm(tm,"x0")
    local real y0=LRtm(tm,"y0")
    local real z0=LRtm(tm,"z0")//        LRtm是读取real的意思,LUtm是读取单位,LItm是读取整形,
    local real angle0
    local real angle
    local real A
    local real dist
    local real skill
    local real k
然后下面因为有个条件而直接略过了所有程序,直接到了set u=null,set tm=null,而这是每0.01秒运行一遍的,有大概60个这种计时器,然后就会有小卡,就是镜头有点不自然,不知道是不是GetUnit()函数问题,镜头移动到对应小兵群的时候,镜头就比较不自然了。
回复

使用道具 举报

发表于 2010-12-26 23:16:12 | 显示全部楼层
优秀的设计才是决定效率的关键,你应该考虑的是为什么会有100个计时器同时在读写哈希表,而不是怎么让这100个计时器运行得更快。
回复

使用道具 举报

发表于 2010-12-27 00:25:35 | 显示全部楼层
哈希表还不够快?照你这写法就连数组都一样卡。

0.01秒运行一次来100个却还在用自定义函数。

再快能多块,jass这个8年前的游戏脚本语言,你不是当成编程语言了吧。
回复

使用道具 举报

 楼主| 发表于 2010-12-27 07:25:02 | 显示全部楼层
没办法,一个单位要一个计时器控制,一百来个单位(=@__@=)呢,,,,,,难道编程语言是非常快的么?学过一点点C但是不了解。。。
回复

使用道具 举报

发表于 2010-12-27 08:59:34 | 显示全部楼层
计时精度可以放宽,不过照你这么玩估计放宽一点可能也好不了多少
局部变量(尤其是需要读写的)的初始化可以滞后,在条件判断前只初始化条件判断中需要用到的变量,其余变量等条件判断成立了再赋值(好吧估计你已经这么做了)
计时器的清理

还有就是……你倒底要实现什么效果?控制什么?是不是可以改良实现方法
回复

使用道具 举报

 楼主| 发表于 2010-12-27 20:03:22 | 显示全部楼层
效果是这样,单位行动的时候发生了位移,如果走在斜坡上,我想改变单位的行动速度,速度减少量和斜坡坡度有关。于是这个斜坡坡度我是这样获取的,取单位在0.01s前的位置和高度和现在的位置高度,高度差比上行走的距离算出斜率,再计算速度。我想倾斜度的或许难有更好的办法了,所以才用了,这个,如果把时间间隔放宽的话由于坡度改变的比较快,例如把时间间隔改成0.1,这样会看到单位上坡时候速度改变是一格一格的改变的,不够平滑,如果用0.01的话会很平滑,很自然。
回复

使用道具 举报

发表于 2010-12-28 14:38:46 | 显示全部楼层
为什么不用一个“计时器”和一个“单位组”呢?
回复

使用道具 举报

发表于 2010-12-28 15:31:32 | 显示全部楼层
嗯,类似中心计时的概念,我问这个就是看能不能用这种方法去替代
0.01-0.1,这可是10倍的差距啊……你可以考虑0.03、0.04这样的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-11-24 20:41 , Processed in 0.032183 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表