找回密码
 点一下
楼主: Renee

本帖将更新一些有关1.23b新系统的问题

[复制链接]
发表于 2009-6-12 08:11:36 | 显示全部楼层
简单地说父key就是子key的命名空间,别理解成双重hash表。


--

无法理解, 父key和子key的取值是不是有某些规则...?
回复

使用道具 举报

 楼主| 发表于 2009-6-12 08:16:17 | 显示全部楼层
引用第14楼linzefei于2009-06-12 04:50发表的  :
那。。写个计时器间隔时间循环大量操作。。看看哪个每秒操作次数更高 而不会卡?。。。。。似乎很窘。。

那法子不行,timer是游戏内时间的计时器,简单地说就是游戏卡的时候它也卡。
回复

使用道具 举报

 楼主| 发表于 2009-6-12 08:18:47 | 显示全部楼层
引用第20楼天零萃梦于2009-06-12 08:11发表的  :
简单地说父key就是子key的命名空间,别理解成双重hash表。


--

.......
没有规则。你可以把它理解成一个2维数组

只是父key相同的几个元素归为一类,清理的时候可以用一个函数一次性清理而已。
回复

使用道具 举报

发表于 2009-6-12 08:29:11 | 显示全部楼层
ok了解了。。

看来要对地图进行大手术了= =..
回复

使用道具 举报

 楼主| 发表于 2009-6-12 08:53:53 | 显示全部楼层
其实说2维数组也有点不确切,因为这2个值是允许负数的。

普遍认为这个哈希表比gc快,但是目前还没有明确地测试过。

不过有几点可以肯定的是,

1]这个哈希表比要多次转换数据类型才能用的gc显然是好多了。就算他们本身速度一样,gc的数据转换内容太多,在效率上已经吃亏了

2]这个哈希表会和数组一样计算变量连接数,一个handle若还保存在哈希表里。那么就算它的对象被删除,这个表位也不会立刻被复用,直到你从哈希表里删去它。这样你就不会因为试图读取该单位而读到另外个新单位去了。这也是我以前推荐用数组系统而不是gc系统的一个原因。gc里保存的东西是和handle表的变量连接数无关的。因此很容易出现指向混乱。

3]gc会随着地图保存而把整个gc表另外弄一份保存到到地图存档文件里。无端增大存档文件的体积和保存时间,也增加了地图的读取时间。哈希表的话没这个问题。
回复

使用道具 举报

 楼主| 发表于 2009-6-12 09:21:21 | 显示全部楼层
看来投影仪还是有问题。
回复

使用道具 举报

发表于 2009-6-12 09:35:31 | 显示全部楼层

Re:test@test

那贴 第1页不能进了

帖子ID非法

。。。奇怪。。我明明回复的 test@test这一帖子```

帖子合并了么``
回复

使用道具 举报

 楼主| 发表于 2009-6-12 09:38:18 | 显示全部楼层
因为被我合并了~~不过似乎还是有wt~~
回复

使用道具 举报

 楼主| 发表于 2009-6-12 09:56:06 | 显示全部楼层
这下呢?
回复

使用道具 举报

发表于 2009-6-12 10:10:07 | 显示全部楼层
合并后 那时就好了。

刚才刷新下 似乎

对不起,本版块为认证版块,您没有权限查看此版块的内容!



然后我从板块点进来 就没问题了。



那法子不行,timer是游戏内时间的计时器,简单地说就是游戏卡的时候它也卡。

..我不是说用它计时

比如。。。以前测试  使用全局和直接写数值的效率对比。。。感觉还是有用的。。

[jass]function abc takes nothing returns nothing
local integer i=0
loop
exitwhen i>udg_i
set udg_b=TRUE
set i=i+1
endloop
endfunction

function Trig________________u_Actions takes nothing returns nothing
call TimerStart(CreateTimer(),0.00001,true,function abc)//计时器可以精确到0.00001的。。(计时器0.00001 等价 计时0秒)
endfunction[/jass]

然后根据更改udg_i来控制 赋值速度。。

结果发现。

udg_i >90   set udg_b=true卡
udg_i >70   set udg_b=TRUE卡

差距还是很明显 可以感觉出的。。。


这样测试的话 还是能测试出的。。
回复

使用道具 举报

发表于 2009-6-12 10:15:59 | 显示全部楼层
原来可以精确到这么多啊,感谢LS
回复

使用道具 举报

发表于 2009-6-12 10:16:49 | 显示全部楼层
看来以后做图方便了。


GA很多演示都没用了
回复

使用道具 举报

 楼主| 发表于 2009-6-12 10:23:14 | 显示全部楼层
其实很多只用了H2I的地图的话是可以直接把H2I查找替换成GetHandleId了事的。但是用了I2H或者C2I的就会比较麻烦了。
回复

使用道具 举报

发表于 2009-6-12 10:30:02 | 显示全部楼层
最近的孔明兄和血戮魔动冰的好多研究都泡水了啊

不知道1.23b什么时候才能在中国普及
我现在都不知道到底是用1.20做图还是用1.23b来做了。
回复

使用道具 举报

发表于 2009-6-12 10:35:16 | 显示全部楼层
\\那两个是个人兴趣.喜欢研究
回复

使用道具 举报

发表于 2009-6-12 10:35:46 | 显示全部楼层
我还是比较喜欢做图
回复

使用道具 举报

发表于 2009-6-12 11:18:02 | 显示全部楼层
果然对很多人来说是悲剧啊... 就感觉上应该比GC快吧
回复

使用道具 举报

 楼主| 发表于 2009-6-12 11:24:35 | 显示全部楼层
引用第29楼linzefei于2009-06-12 10:10发表的  :
合并后 那时就好了。

刚才刷新下 似乎

对不起,本版块为认证版块,您没有权限查看此版块的内容!
.......

用你这个法子粗略地测试了下,用的都是储存整数功能,为公平起见都用cj函数。

结果是,数组80 哈希表50 gc20

以下函数每0.00001s(Timer)执行一次。

[jass]
//哈希表,udg_i为50不卡
function abc takes nothing returns nothing
local integer i=0
loop
exitwhen i>udg_i
    call SaveInteger( udg_ht, 1, 1, 3 )
set i=i+1
endloop
endfunction

//gamecache,udg_i为20不卡
function abc takes nothing returns nothing
local integer i=0
loop
exitwhen i>udg_i
    call StoreInteger( udg_gc, "1", "1", 3 )
set i=i+1
endloop
endfunction

//数组,udg_i为80不卡
function abc takes nothing returns nothing
local integer i=0
loop
exitwhen i>udg_i
    set udg_ar[100]=3
set i=i+1
endloop
endfunction
[/jass]

明显地,比gc快多了,虽然及不上直接设置数组值,但考虑到数组有下标上限,用来做单位index比较麻烦,扣除这部分代价综合来看还是好于数组系统的。至于gamecache系统那完全不必说了,除了速度方面问题,还有其他负面问题,比如我上面提到的那些。
回复

使用道具 举报

 楼主| 发表于 2009-6-12 11:29:53 | 显示全部楼层
目前这个测试仅限于存储整数,有时间我再测试下另外的。
回复

使用道具 举报

发表于 2009-6-12 11:38:31 | 显示全部楼层
有这个已经足够了,即使其他的非常慢,有整数什么都有了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-22 16:32 , Processed in 0.098056 second(s), 17 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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