what "null" is?
Printable View
what "null" is?
maybe in indonesian we can call it "ENOL" :tense:
ENOL? gw gak tau jg itu paan
Integer 0 = 0
Object 0 = null
Tapi integer, real, ma string gx usa dinull kahn... ~_~
what's about boolean?? if we write null, it will be a syntax error
Oia Lupa Boolean juga
diisi ENOL juga ga?? pa diisi false??
z
Boolean
Integer
Real
String
gx usa dinull, difalse, di0, atau diapa2in
zzz
ow
bzz
tq
mbzz
btw, ni thread ga di sticky? penting ne
Kalo sebuah object variable perlu di remove dari memory location lalu di nullify.
List Object Variable:
- Location
- Player
- Rect
- Group
- Force
Masalahnya kalo kamu remove object variable tersebut dari memory, maka di game tersebut juga akan hilang. Misalnya
Untuk location fungsi nya adalah:Code:globals
group udg_test = CreateGroup()
endglobals
function NullifyGroup takes nothing returns nothing
local group test = udg_test
call DestroyGroup(test)
call ForGroup(udg_test, DoNothing()) // Tidak akan berfungsi, game intepreter akan bingung manakah udg_test, karena sudah di remove.
set test = null
endfunction
RemoveLocation(location loc)
Jadinya untuk handling memory leak hanya berlaku buat location variable, dan variable2 tertentu yang hanya dipake sekali (tidak rekursif). Karena itu kalo ada leak di kode kamu coba bikin algorithm nya semaksimal mungkin efficient. Karena memory leak hanya nambah sekitar 1byte kepada memory usage. Tetapi bila di loop, lama-lama akan bertambah jadi 100mb dan lama-lama akan jadi lag.
The right way to nullify a location variable:
Code:function SpellTarget takes nothing returns nothing
local location l = GetSpellAbilityTarget()
call SpecialEffectOnLoc( l , "Nova")
call RemoveLocation(l) //Stop memory leak
set l = null //Stop memory leak
endfunction
Perasaan udah dikasih tau kaLau emang untuk yang udah kelar dipake -_-
Untuk list yang leak apa aja, banyak banget, silahkan liat di common.j @_@
All Players itu variable jadi kalo didestroy jadi ngaco
Sama nasibnya sama Rect Gameplay Area,
dimana function "Entire Map" (returns GetWorldBounds()) bakal ngecreate satu handle rect yang kalo gak diancurin bakal ngeLeak, n OK to destroy ngaco
Lain halnya dengan "Playable Map Area" (returns bj_playableMapArea) yang merupakan satu variable, bakal bum bum duar ngaco kalo didestroy
lagian ini kan buat GUI DoOs... :sob: ntar gw lanjutin buat JASSnya deh... (di GUI no locals, so no thing to null)
n untuk masalah yang kayak DoOs, jgn pernah set local jadi global dah gitu didestroy
cukup null but don't destroy
Ini bukan masalah, tetapi kalo kamu "sering" program pake JASS pasti akan ketemu halangan seperti ini dimana kamu harus handle group leak di algorithm yang rekursif, jadinya bagaimanapun juga kamu pasti akan dapat leak walaupun hanya di null.Quote:
n untuk masalah yang kayak DoOs, jgn pernah set local jadi global dah gitu didestroy
cukup null but don't destroy
Dan secara logika tidak ada cara yang pasti buat handle leak di GUI. Karena GUI membuat segment-segment BJ.
Karena itu kalo kamu coba bikin tutorial di wc3campaigns atau hiveworkshop, akan selalu diminta untuk menempatkan tex "Best written in JASS", karena banyak orang yang punya pengalaman mengalami bahwa map-map mereka yang berbasis GUI makin lama di update makin ngelag.
problem gw tuh.. @_@
map gw rasanya masi ngelag aj, apalagi tambahin weather effect..
gw selalu pake JASS,
tapi,
Gw gak pernah kena masalah macem ini, karena semua global variable yang rekursif bakal ditahan active sampe game kelar.
null untuk hilangkan leak dari local, dan untuk leak dari handle bisa ditunggu sampe last use of the variable, atau untuk yang permanent variable ditunggu sampai game selesai. (Global kan? Kalau mau dipake lagi jangan diancurin, sampe yakin gak bakal dipake lagi.)
Memang GUI tidak bisa menghilangkan local leak.
Karena function2 BJ semuanya kagak null local
Tepat sekali untuk yang ketiga
Swt dah @@, makanya saya bilang kalo "sering" programming jass kamu pasti akan menemukan halangan ini, seperti membikin spell... makanya Vexorian ngebikin CS caster system ama Handle struct. Kalo group nya global yah itu mah standard, tetapi kalo misalnya kamu harus construct group setiap loop untuk spell effect gmn coba? Setiap rekur akan ada memory leak.... Makanya di design CS caster system yang free lag.
Masa Spell Rekursif -_-
adakah spell yang permanent sampe game end bzzz
Gak sepanjang game bro, mungkin bisa saja loop seperti spell nya Invoker... mengapa kalo di game Invoker ngebikin lag? Karena itu...
lah, dah exit loop kan langsung destroy -_-
Nope karena setiap kreasi group baru itu di reference ke w3x memory cache. Jadinya walaupun kamu sudah destroy local tersebut, ada bebarapa reference yang menjadi memory leak. <<< ini namanya memory leak. Bukan sekedar hal null value aja, karena language JASS tidak ada variable overloading control seperti Java.
Ya, kalau itu sih emang udah original Leak yang gak bisa diganggu lagi,
soal itu, string juga leak
tapi kan gak ada hubungannya sama Group rekursif loop dsb -_-
Invoker bikin lag karena gak 100% barang2nya dipreload -_-
begitu Invoker learn skill baru, lag deh
Kalau unit group. kita pake function Add (unit group1) to (variable), trus kita variable itu ngeleak ga ya ?
unitgroup1 nge leak
harusnya
add unitgrup variable1 ke variable2
Tapi kan buat add unit ke variable 1, perlu unit group yang lain juga, alias pasti ngeleak donk.
add sama set tu beda, klo add tu nambah, klo set tu langsung mereplace dengan ketentuan baru, makanya klo langsung set variabel unit grup ke variabel yang belum didestroy, pasti ngelag, trus fungsi add unit to unit grup sama sekali gak bakal nge lag.
contoh add unit grup to unit grup yg bener:
set tempgrup1: xx
set tempgrup2: xx
add tempgrup2 to tempgrup1
destroy tempgrup1
(tempgrup2 gak didestroy karena masih kepake)
logika unit grup:
unit grup akan ngelag klo dibiarkan terus bertumpuk, makanya perlu dihancurkan.
tiap kali ada statement unit grup misalnya: unit within range, unit in rect, dll, maka itu ada lah unit grup dan perlu dihancurkan bila tak digunakan
WE standar menyediakan option add, pick dll dengan statement unit grup langsung, padahal itu kesalahan besar, semua statement unitgrup perlu dimasukan variabel karena harus didestroy
set variabel unitgrup itu BUKAN FUNGSI dan tidak akan ngelag biarpun memakai kalimat unit within range, unit in rect
Add sama Set ya beda -_-
Set variabel bukan fungsi
yep
tidak ngelag walaupun memakai kalimat unit within range?
-_-
itu fungsi
set variable = unit within range
artinya
set variable jadi return value dari fungsi within range
fungsi within rangenya diRun duLu
jeLasnya itu fungsi -_-
Oh iya tq2 infonya
Allow all gw bikin map nih, tentang penyerbuan sebuah castle judul nya "FORWARD !!!" dalam map gw ini para knight spawn setiap 30 mnt, footman spawn setiap 40 mnt, dst.... yang jadi masalah = di saat tertentu terjadi antrian knight di jalan yang sempit pada map saya ini dan terjadi lah lag/leak.
pertanyaan nya :
apakah dengan cara yang sudah di beberkan thanatos itu bisa menghilangkan leak pada map saya ini ?
kalau mau di liat silahkan download di sini :
Forward !!!.w3x
mohon bantuan nya ya kawan2 ?
kitaupload.com - Upload Filemu
Map sudah bersih dari leak ^_^
mending lu baca dari awal tutorialnya..
kalo gw ada trigger kayak begitu itu nge leak nggak ya?? ada yang bilang Random N units from Unit Group itu ngasih leak dalam bentuk Point, tapi aku gk mudeng soalnya itu kan gak ada Point sama sekali, palingan Region doang...Code:Dinosaur Attacks1
Events
Time - Every 20.00 seconds of game time
Conditions
Actions
Set PlayerGroup = (All enemies of Player 1 (Red))
Set PlayerGroup2 = (All allies of Player 1 (Red))
Set TempReg = (Playable map area)
Set TempGroup = (Random 1 units from (Units in TempReg owned by (Random player from PlayerGroup)))
Set RandomMovePoint = (Position of (Random unit from (Units in TempReg owned by (Random player from PlayerGroup2))))
Unit Group - Pick every unit in TempGroup and do (Unit - Order (Picked unit) to Attack-Move To RandomMovePoint)
Custom script: call RemoveRect(udg_TempReg)
Custom script: call DestroyGroup(udg_TempGroup)
Custom script: call RemoveLocation(udg_RandomMovePoint)
Custom script: call DestroyForce(udg_PlayerGroup)
Custom script: call DestroyForce(udg_PlayerGroup2)
Position of blah-blah-blah itu Point (Location)... nah itu leaky...
dan ada yg bilang tipe data point adalah sebuah tipe data gagal sehingga sudah digantikan dengan permainan X,Y
(ya iyalah masa cuman store X,Y harus dijadiin class)
dan btw... di Unit Groupnya sebelumnya tambahin custom script : set bj_wantDestroyGroup = true
karena " Unit Group - Pick every unit in TempGroup and do (Unit - Order (Picked unit) to Attack-Move To RandomMovePoint)" membuat sebuah grup baru yang harus segera di destroy agar ga mem leak...
kalo yg di situ ada leak ndak? soalnya aku agak kurang yakin, semua point sampe region udah aku variable-in dan di destroy, tapi masih raguCode:Set PlayerGroup = (All enemies of Player 1 (Red))
Set PlayerGroup2 = (All allies of Player 1 (Red))
Set TempReg = (Playable map area)
Set TempGroup = (Random 1 units from (Units in TempReg owned by (Random player from PlayerGroup)))
Set RandomMovePoint = (Position of (Random unit from (Units in TempReg owned by (Random player from PlayerGroup2))))
Custom script: call RemoveRect(udg_TempReg)
Custom script: call DestroyGroup(udg_TempGroup)
Custom script: call RemoveLocation(udg_RandomMovePoint)
Custom script: call DestroyForce(udg_PlayerGroup)
Custom script: call DestroyForce(udg_PlayerGroup2)
jadi sebelum adatambahinCode:Unit Group - Pick every unit in TempGroup and do (Unit - Order (Picked unit) to Attack-Move To RandomMovePoint)
gitu ya? setiap ada Unit Group - Pick every blablabla harus kasih bj juga??Code:Custom Script : setbj_wantDestroyGroup=true
oh ya playable map area itu constant ato sebaiknya dijadiin variable aja ya?
ga perlu kayaknya kasi bj. lgsg aja remove klo ga pake lgi. yg penting point sm group.
itu quote jaman kapan yak... @_@