Strings in C#: == vs .Equals

I've heard a few times that .Equals is better than == for comparing strings in C#.  To test this, I wrote a little C# program that called == a hundred million times, and then compared it with .Equals.

Here's the code:

             string a = "hello";

             string b = "hello";

             int count = 0;

             DateTime start = DateTime.Now;


             for (int i=0; i<100000000; i++)


                   if (a.Equals(b))






             TimeSpan ts = DateTime.Now - start;

             Console.WriteLine("{0}", ts.Milliseconds);

The results were interesting.. I did the test four times, twice changing the strings so they were not equal (changing string “b” to “jello” from “hello”) and twice using == instead of .Equals.

Here's the results:


a == b a.Equals(b)
Equal strings 961ms 655ms
Differing strings 750ms 890ms

So “a == b” is much slower when the strings are identical, and somewhat faster when the strings are different.  But either way, I could compare these strings a hundred million times in less than a second.  Another way to look at it is == is about 90% as fast as .Equals, on average (assuming your strings are the same about half the time).

Personally I think the difference is negligible and I prefer the readability of ==, but for performance-critical code it would make sense to think about whether you expect the strings to match or not match most of the time and choose the right one accordingly.