The question was deceptively simple:

Hi,

I used all three and I find ToLower() to be fastest .But the Msdn article says that ToLowerInvariant should be faster. http://msdn.microsoft.com/en-us/library/system.string.tolowerinvariant(VS.85).aspx .
Which one is better with respect to performance.

Results are ,

173ms ToLower
260ms ToLowerInvariant
265ms ToLowerCultureInfoInvariant

The results seem okay to me, it is the link that is off a bit....

It is a matter of where/how you aim expectations.

You see, starting in .Net 2.0 (and subsequent versions), "invariant" casing actually means "use the operating system casing results" and also "don't do those weird linguistic results".

Thus just using ToLower() will cause you to miss hundreds of characters being mapped, and it will map some characters likely best left alone.

Performance is one reasonable axis to use for the judging of results, but correctness is, too, right?

The ad campaign "ToLower may be wrongest, but at least it can be fastest!" is unlikely to be as effective as that 5-year old using Windows 7. :-)