This is couse all points refered to by trigger, all special effects, all groups, all triggers etc are like units. A unit don't disappear into the void if you don't remove it. So you have to do this manually after each use if them. You can do this by doing the follwing. It doesn't cover everything that needs to get destroyed. But the mayor factors. If you have already done this the lag is just lag.
Point - After every (yes every) use of a point (Create unit at location, special effect at location, Order move to location) do the following:
(Note, this does not apply to variable points which are used many times in diffrent triggers etc.)
set [A global point variable of your choice, in this case TempPoint]TempPoint = [Your point]
[Do all actions refering to this point, take note that no wait actions can be used.]
Custom Script: call RemoveLocation( udg_TempPoint ) [This is Jass and basicly removes the point after it has been used. The udg_ prefix is couse all global variables (made by clicking ctrl+b) has this infront of the name. Uppercase and lowercase letters are very important. Don't change them!
]
Trigger - After use of any trigger which only will run once, use:
Custom Script: call DestroyTrigger( GetTriggeringTrigger())
This will destroy the trigger, and thus it will not take up worthfull memory after it has launched. Triggers don't leak much. But you can still do this.
Groups - Before any use of "Unit Group - Pick Every units in group" (Note, this does not apply to variable groups.) paste the following line:
Custom Script: set bj_WantDestroyGroup=true
This will destroy the groups after it has been the following group function has been exectued.
Special Effect - After you have created any special effect do the following. set [Your Variable] = Last Created Special Effect. Then do Special effect - Destroy [Your Variable]. But, since special effect destroyed immideatly usally don't play their birth/stand/death or whatever animations. You need to put a Wait (0.00) seconds after this. But sadly enough another trigger might set the variable to another value, leaving the special effect undestroyed. There is nothing to do about this except to create a massive array or something. Or use Jass which is alot better at cleaning up stuff.