Whoa, a Pentium II.
Anyway, it isn't clear which is better. As far as performance programming goes, "it runs well on my computer" or "it runs poorly on my computer" doesn't really say much (although the latter is usually more interesting). Could you post your code you used to benchmark it? If you just tested it in your actual playable map, then it might not be as convincing of a test because there are too many variables to consider. Just to name a few: it can easily be confounded with GPU performance if your camera is not in the same location between two tests (e.g. one test might be rendering 20 units in the scene whereas the other one might be in fog of war); different events may be going on that slow down performance; it is harder to isolate the issue, etc.
You probably won't notice speed differences unless you're doing stress testing by spamming the same instruction every 0.001 seconds or so (even then, it isn't really that great of a performance-measure). I'm happy you brought it up if those were your results though.

But we have to make sure it is a correct test.
As for hashing vs. arrays, it really depends on the context. Again, that is something that is difficult to measure. Without stress testing, the results won't be prominent enough to notice. With stress testing, CPU caching comes into play (and usually array access will win out), but that might not be the results we're curious about.

Use whichever one makes sense for the situation. Hashtables are fine to use--a lot of people prefer not to use them because they're verbose, the performance difference is negligible.
As for the periodic timers bug, you just have to restart the timer with TimerStart(). I don't see why you would have issues with it unless there is something wrong with your code.
about timers, ive got a lot of spells were need a periodic timer, like i said, map got duel system, and when duel starts, all mobs, all creeps and everything wich not in duel are paused, so i need a pause timers too, qoz some of those spells, got a buffs or effects wich not paused if use only PauseAllUnits. they disapear when spell is finished with periodic timer.
so for example i use
call Timerstart(timer,.03,true, function ...)
if il pause this timer and after il resume him, then he will not be a periodic anymore, qoz in codefunction i use for example
local timer t = GetExpiredTimer()
so how can i use there call TimerStart(same timer)?

) i need then same function wich be upper of this and again and again...ofc i can use execute funtion method, but sometimes they are not works good after optimize the map.
so for now i just create a periodic trigger instead of timer, and after spell finished, i destroy him, and when need to pause spell, i stop the trigger. and after duel i resume him. its not the best way, ofc i can made vars with function names for every timers, but then need made over 200 vars for that qoz function codes cannot be in arrays, its not good point. about stress tests. well, i didnt use fog of war, i just putted on map over 200-300 units and used the spell and my cam position was on point where those units. i didnt tell that use forgroup or filter is faster everytime, but in my map this works faster, ofc its depends of coding, but loops with 200-300 units everytime worked slower for me(there need use fog group for add back units into main group again with 200-300 units loop). its could be not for everyone, but for me loops are slower for big groups. if units in group over 10-15, then ofc i use loop method, qoz no point to made anothrer one leak.
example code in periodic timer with timeperiod 0.03-0.001:
function bbbb takes noting returns nothing
local timer t = GetExpiredTimer()
local unit target
local unit caster = lets it be some loaded unit
loop
set target = Firstofgroup(group1)
exitwhen target == null
some code....
call GroupAddUnit(group2,target)
call GroupRemoveUnit(group1,target)
endfunction
//and after this need add back those units in group1 (fog group method)
loop
set target = FirstOfgroup(group2)
exitwhen target == null
call GroupAddUnit(group1,target)
call GroupRemoveUnit(group2,target)
endloop
null locals
endfunction
so this method will be 100% for slower than if i just use ForGroup method if in group more than 15-20 units...if there is 100 or more then will starts lag spikes, but forgroup will not start those spikes. (only for me,cant be sure 100% for other ppl) this tested on pentium 2
