找回密码
 点一下
查看: 4130|回复: 13

触发器能容纳多少个事件呢

[复制链接]
发表于 2008-8-1 19:44:29 | 显示全部楼层 |阅读模式
原来只是一个实验而已。用0.001秒的timer往触发里填充单位伤害事件,然后吃完饭回来发现已经填了100多w老,内存使用达到600多M~cpu占用率将满,不过关掉填充timer一切都还正常~
触发的使用也没问题。貌似往触发器里填事件的cpu消耗与触发已有的事件数正相关。

另外又测了下新增字符串的处理速度,结果到10w这个数量级cpu就跑不动老,或者出现没有标题和内容的迷之错误对话框

评分

参与人数 1威望 +1 收起 理由
狡猾的兔子 + 1 原创内容

查看全部评分

发表于 2008-8-1 22:16:20 | 显示全部楼层
关掉填充timer内存还是600m么?
回复

使用道具 举报

 楼主| 发表于 2008-8-2 03:08:34 | 显示全部楼层
那必然~每个事件都占一个句柄
回复

使用道具 举报

 楼主| 发表于 2008-8-2 03:20:53 | 显示全部楼层
其实我想探讨一种新的动态触发的注册方法,无需频繁的创建临时触发和条件。像同类型的单位伤害事件可以共用一个全局trigger,如果觉得事件积累得过多了销毁再重新创建来释放触发事件(不知道有没有涉及变量部分的释放,不过句柄部分是回收的)

一个触发积累过多事件的影响我只看出直接的两方面,销毁与添加新事件会慢些
回复

使用道具 举报

发表于 2008-8-2 03:28:17 | 显示全部楼层
要中途取消事件的单位怎么办呢
回复

使用道具 举报

发表于 2008-8-2 10:05:05 | 显示全部楼层
怎么销毁事件??
回复

使用道具 举报

 楼主| 发表于 2008-8-2 14:53:41 | 显示全部楼层
引用第5楼variable.z于2008-08-02 10:05发表的  :
怎么销毁事件??
只有销毁整个触发
要中途取消事件的单位怎么办呢
所有判断可以在动作里进行
比如做附魔箭矢,以往的做法是单位攻击--创建临时触发==注册单位伤害事件和条件动作==触发一次或一定时间后删除临时触发
用全局注册的方法则是单位进入地图则加一个单位伤害事件给预设触==条件中判断buff等==做动作。主要是保证每个单位注册过一次且只一次
回复

使用道具 举报

发表于 2008-8-2 18:25:21 | 显示全部楼层
这倒是个好方法
回复

使用道具 举报

发表于 2008-8-23 19:26:54 | 显示全部楼层
事件其实就系一个侦听器。听过侦听器有上限设置的么?
回复

使用道具 举报

发表于 2008-8-23 20:11:30 | 显示全部楼层
考虑极端点,内存溢出了,你说有上限不
回复

使用道具 举报

发表于 2008-8-24 18:15:10 | 显示全部楼层
那也是跟内存有关的说,假如内存有无穷大呢,那系不系就无限了呃
回复

使用道具 举报

发表于 2008-8-24 19:16:24 | 显示全部楼层
我只不过是举了个稍微极端点的反例而已,没看过源代码,一切都只能猜测和试验。

又假设blz是把触发器注册的事件记录在一个定长数组上呢?
回复

使用道具 举报

发表于 2008-8-25 07:17:13 | 显示全部楼层
引用第10楼feelerly于2008-08-24 18:15发表的  :
那也是跟内存有关的说,假如内存有无穷大呢,那系不系就无限了呃

……你怎么不直接说“假如PC是理想化的图灵机”??
回复

使用道具 举报

发表于 2008-8-25 09:49:10 | 显示全部楼层
上限与内存是无关的,上限本就应该是一个理想化的数值,内存的限制不应计入上限的
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-9 07:24 , Processed in 0.065592 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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