DataSystem的概念起源于2005年的ReturnBug+GC时代,因为GC的读写效率不佳,而产生以GC储存数组编号,再以变量数组做为主要储存空间的技术,因为变量数组的读写速度是最快的,即使是现在的HashTable也比不上变量数组,所以DataSystem目前仍是最优秀的数据储存系统。至于为什么这种东西可以叫做DataSystem,至今已不可考,反正魔兽地图高手们口耳相传的都是这个词,所以久而久之也没有人去质疑为什么这东西叫做DataSystem。
1.24下 TimerDataSystem 与 timer+hashtable方法对比:
每0.01秒循环创建N个循环10次的0秒计时器,以某古董机的FPS到5为准。
N个循环周期为0.001秒的计时器不停循环,以某古董机FPS到5为准。
1.24可以直接使用TDS,而对于1.20的war3,只需要实现GetHandleId就可以。
function GetHandleId takes handle h returns integer
return h
return 174
endfunction
另外还有方法使TimerDataSystem完全支持1.20与1.24,在词条最后。
TimerDataSystem需要预创建计时器,在地图初始化时创建足够地图使用的计时器数量(同时执行计时器的最大数量)然后用数组来存取数据,每次使用时创建不重复的索引作为数组下标,在TimerStart所调用的函数中可以获得这个索引来达到传递数据的目的。但因为是数组,所以有着最大下标8191的限制,但是我相信没有人的地图里会同时执行着8000多个计时器吧。
那么我们来看看TDS是怎样工作的:
假设我们有一个函数来获得不重复的索引:CreateTimerId
然后拥有一个函数可以在TimerStart执行的函数内获得这个索引:GetTimerId
最后还有一个函数可以释放这个索引,以便重复使用:DestroyTimerId
于是我们就可以用这个索引+数组来存储数据,写出来的代码会是下面这样:
function test_Action takes nothing returns nothing
local integer id=GetTimerId() //获得计时器所对应的索引