I was recently thinking if I really liked to use the Multiple assignment in 'C#' or if it was less readable. In 'C' this syntax was popular as it tended to lead to smaller and quicker code.
So I wondered in C# if the multiple assigment also lead to quicker code. So I quickly wrote some test cases to see which style of code was quicker to execute...
I took a rather simplistic model to profile, in order to make the tests more repeatable and easy to follow.
The .NET code followed the followed the structure:
[STAThread] static void Main(string[] args)
int Count1;
int Count2;
int Count3;
int Count4;
int Count5;
int Count6;
int Count7;
int Count8;
Count1 =
Count2 =
Count3 =
Count4 =
Count5 =
Count6 =
Count7 =
Count8 = 100;
DateTime time = DateTime.Now;
for (long i = 0; i < 1000000000; i++)
{
int x = 100;
Count1 =
Count2 =
Count3 =
Count4 =
Count5 =
Count6 =
Count7 =
Count8 = x;
}
TimeSpan span = DateTime.Now - time;
Console.WriteLine("Time taken{0}", span.TotalMilliseconds / 1000.0);
}
| Test |
.NET 1.1 Debug Mode |
.NET 1.1 under the debugger |
.NET 1.1 Release Mode |
| Count1=x;Count2=x;..... |
7 |
7 |
4.5 |
| Count1=Count2=Count3 ...=x; |
9.5 |
9.5 |
4.5 |
| |
|
Results are in seconds
I did test out directly setting the values eg Count1=100; Count2=100; etc as well as using strings. These variations appeared to give similar results. I carried out the same expermiment under .NET 2 and the results were similar just slightly slower in debug mode.
The machine that carried out the tests was an Intel 3.4Ghz P4 running XP SP2 with 1GB RAM.
I guess as ever this proves that it is more important to write readable code that requires the minimum of maintanance, rather than trying to outwit the compiler/CLR.
So would I use the multiple assignment? Probably not as much as I used to, but when it leads to easier to read code then yes.