|
如题。
我的解决方案(脑中):
[codes=jass]
…………
local string s=“A”+“B”
call StoreInteger(udg_GC,I2S(H2I(GetTriggerUnit())),s,0)
set s=null
…………
[/codes]
是不是这样?
套用actboy168的回帖就是:
目前的结论是:
1 任何新出现的字符串都会记录到内存里,不能被删除,也不会删除
2 如果你的字符串达到100万条,你的地图会变卡
也就是说,除非不用string,否则一定有“泄露”(这个其实不是泄露),如果你的地图里的字符串达到或者接近100万条,那么你得考虑这个字符串的问题
泄露的定义
如果某一段内存不能被外部访问,那么这段内存就是泄露了,可以说在这个进程的生命周期里,这段内存就白白浪费了,一般泄露是不会造成系统速度变慢的,只是浪费了内存空间。
而war3里的handle泄露会变慢的原因,不是因为泄露,而是war3每次新建一个handle值时都要搜索handle表(估计是这个算法太差了),当handle表很大时,每新建一个handle值都会很慢,如果某一个点用完后,没删取,那么它还是会在handle表里,当你有很多没删除的点时,handle表就会很大,速度就变得很慢了。这也是删除后必须set null的原因。
谢谢actboy168。
非常感谢。 |
|