C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML
Fields provide a way to persist a value into a memory storage outside of a procedure call. But they require additional indirections at the level of the machine memory to address.
Tip: This optimization uses local variables that copy fields—and then are copied to fields.
Example. To start, this program shows how to directly modify a static field. It then shows to copy the field value to a local variable of the same type and then modify that local variable.
Here: The methods Method1 and Method2 show how to directly modify the field and how to cache the field value.
C# program that benchmarks fields and locals
using System;
using System.Diagnostics;
class Program
{
static int _temp1; // Static field
static void Method1()
{
// Increment the static field ten times.
for (int i = 0; i < 10; i++)
{
_temp1++;
}
}
static void Method2()
{
// Load static field into variable.
// ... Increment that ten times, then copy the value.
int copy = _temp1;
for (int i = 0; i < 10; i++)
{
copy++;
}
_temp1 = copy;
}
// === Start benchmark code
const int _max = 1000000;
static void Main()
{
var s1 = Stopwatch.StartNew();
for (int i = 0; i < _max; i++)
{
Method1();
}
s1.Stop();
var s2 = Stopwatch.StartNew();
for (int i = 0; i < _max; i++)
{
Method2();
}
s2.Stop();
Console.WriteLine(((double)(s1.Elapsed.TotalMilliseconds * 1000 * 1000)
/ _max).ToString("0.00 ns"));
Console.WriteLine(((double)(s2.Elapsed.TotalMilliseconds * 1000 * 1000)
/ _max).ToString("0.00 ns"));
Console.Read();
}
}
Output
15.86 ns
5.18 ns



Method2 required only about five nanoseconds. Method1 took more than three times as long. Copying a field to a local variable, changing the local variable, and then copying the value to the original location is sometimes more efficient.
Discussion. In optimizing computer programs written in high-level languages, code that requires more lines is sometimes more efficient. There is an uncertain correlation between the length of the source code and that of the instruction stream.
Further: Instructions have different latencies in the memory hierarchy and require varying times, even unpredictable times.
Summary. We saw how in the C# language storing a field into a local variable cache of the same type can improve efficiency. At some level, this relates directly to the concept of the memory hierarchy in computer science.
And: Local variables are most likely stored in registers. Fields (stored in a heap memory location) are slower to access.
Memory Hierarchy: Performance Optimization