Cache Field Lookups

Accessing object fields is much slower than accessing local variables. Instead of writing:

Accessing object fields is much slower than accessing local variables. Instead of writing:

You should write:

int count = this.mCount; Item[] items = this.mItems; for (int i = 0; i < count; i++) dumpItems(items[i]);

(We're using an explicit "this" to make it clear that these are member variables.)

A similar guideline is never call a method in the second clause of a "for" statement. For example, the following code will execute the getCount() method once per iteration, which is a huge waste when you could have simply cached the value as an int:

It's also usually a good idea to create a local variable if you're going to be accessing an instance field more than once. For example:

It's also usually a good idea to create a local variable if you're going to be accessing an instance field more than once. For example:

mScrollBar.setBounds(0, height - size, width, height);

mScrollBar.setParams(

computeHorizontalScrollRange(),

computeHorizontalScrollOffset(),

computeHorizontalScrollExtent(), false);

}

}

mScrollBar.draw(canvas);

That's four separate lookups of the member field mScrollBar. By caching mScrollBar in a local stack variable, the four member field lookups become four stack variable references, which are much more efficient.

Incidentally, method arguments have the same performance characteristics as local variables.

0 0

Post a comment