Multiple Calls vs A Variable

WolfieeifloW

WEHZ Helper
Reaction score
372
How many function calls does it take before using a variable is more efficient.

Ex: I use [ljass]GetTriggerUnit()[/ljass] twice in a function.
Is it better to make a variable [ljass]local unit tu = GetTriggerUnit()[/ljass] or just call it twice without the variable?

What's the magic number where it becomes better (More efficient) to use a variable?
 
>it's much faster and more efficient, even if it has more lines of code
Yes, what this guy said. I see a lot of stupid posts like "This can be inlined to be faster", but that is simply not the case.
 
It depends, really.

GetTriggerUnit and other event responses are very fast. A variable read, if I recall correctly is faster.

However, declaring and setting a variable is quite slow. You might need even 3-4 GetTriggerUnit calls to justify using a local. This is a total guess, by the way. However, in reality, the speed difference is entirely negligible. For all intents and purposes, two is the magic number.
 
>it's much faster and more efficient, even if it has more lines of code
Yes, what this guy said. I see a lot of stupid posts like "This can be inlined to be faster", but that is simply not the case.
Care to elaborate?

I mean i'm all for readability and i would use the [ljass]local[/ljass] too but im not 100% sure it's actually faster.

In comparison we've got two native calls versus one native call, one local declaration and two local reads. So the local declaration and two reads have to be faster than one native call. Meh, i'm not sure there. And, afair, the more locals you have the slower the read gets.
But this goes really deep into wc3-internals. There are some threads over at wc3c about this [1][2].

But for clarification: use the [ljass]local[/ljass]. It's way nicer. I just posted this for some interesting thoughts.

[1]: http://www.wc3c.net/showthread.php?t=96208
[2]: http://www.wc3c.net/showthread.php?t=98860
 
i always used three as a cut off point, mainly because past that I get tried of typing out the native, and would rather just use a single digit variable name - that and I figure at about that point its as fast, if not faster, to start using a local

you can always use a global, therefore you would not have to declare or null, just set and use, but then again I think globals are slower then locals (un-cited)
 
>you can always use a global, therefore you would not have to declare or null, just set and use, but then again I think globals are slower then locals (un-cited)
I'm 80% sure that a global is faster, actually.
 
Speedwise, I believe it goes globals, locals, natives.

Nestharus did a benchmark on all of these sometime ago.

If I remember right, in special cases the order changes, but for all intents and purposes that's the way it goes. Either way, it doesn't matter.
 
So in each trigger, I should set a global like:
Code:
private unit t
Then in my functions something like:
Code:
set t = GetTriggerUnit()
And then use it for that function?

I totally forgot about nulling units if their local, so globals would be nice if the above is how it works.
 
No, don't do that. Just use the local method if there's 2 or more calls and the natives if it's only one.
 
Okay.
I have to do [ljass]set t = null[/ljass] at the end though right?
What else has to be nulled?

I used to know all this before I quit for like two years :p
 
everything that extend a handle should be nulled

unit, trigger, location, etc...
 
Well, there are exceptions to about every rule, nulling included.

In an initialization (read: only map initilization) function, I don't think you need to null a local trigger, because map initilization only happens once so the address for the local trigger only needs to be assigned once.
 
The way I hear it, two is the magic number. However, unless you're doing some INSANELY speed intensive work, you should put readability at a much higher priority than efficiency. In most situations, I wouldn't worry about it.

As far as local variable go, the only things that cause leaks by requiring nulling (and can be taken care of), are types that extend agent. In some cases, like tooltiperror was pointing out, there is no need to null a variable, but this is when the object referred to by the local variable will not be destroyed. For example, an initializer trigger CAN be destroyed, but to fully remove the leak, you would also need to null the local trigger variable. Often times people do not destroy initializer triggers (since it is not that useful to do so), and therefore nulling the local trigger variable is not needed, and useless.
 
General chit-chat
Help Users
  • No one is chatting at the moment.
  • V-SNES V-SNES:
    Happy Friday!
    +1
  • The Helper The Helper:
    News portal has been retired. Main page of site goes to Headline News forum now
  • The Helper The Helper:
    I am working on getting access to the old news portal under a different URL for those that would rather use that for news before we get a different news view.
  • Ghan Ghan:
    Easily done
    +1
  • The Helper The Helper:
    https://www.thehelper.net/pages/news/ is a link to the old news portal - i will integrate it into the interface somewhere when i figure it out
  • Ghan Ghan:
    Need to try something
  • Ghan Ghan:
    Hopefully this won't cause problems.
  • Ghan Ghan:
    Hmm
  • Ghan Ghan:
    I have converted the Headline News forum to an Article type forum. It will now show the top 20 threads with more detail of each thread.
  • Ghan Ghan:
    See how we like that.
  • The Helper The Helper:
    I do not see a way to go past the 1st page of posts on the forum though
  • The Helper The Helper:
    It is OK though for the main page to open up on the forum in the view it was before. As long as the portal has its own URL so it can be viewed that way I do want to try it as a regular forum view for a while
  • Ghan Ghan:
    Yeah I'm not sure what the deal is with the pagination.
  • Ghan Ghan:
    It SHOULD be there so I think it might just be an artifact of having an older style.
  • Ghan Ghan:
    I switched it to a "Standard" article forum. This will show the thread list like normal, but the threads themselves will have the first post set up above the rest of the "comments"
  • The Helper The Helper:
    I don't really get that article forum but I think it is because I have never really seen it used on a multi post thread
  • Ghan Ghan:
    RpNation makes more use of it right now as an example: https://www.rpnation.com/news/
  • The Helper The Helper:
  • The Helper The Helper:
    What do you think Tom?
  • tom_mai78101 tom_mai78101:
    I will have to get used to this.
  • tom_mai78101 tom_mai78101:
    The latest news feed looks good

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top