I have a string buffer of about 2000 characters and need to check the buffer if it contains a specific string.
Will do the check in a ASP.NET 2.0 webapp for every webrequest.
Does anyone know if the String.Contains method performs better than String.IndexOf method?
// 2000 characters in s1, search token in s2 string s1 = 'Many characters. The quick brown fox jumps over the lazy dog'; string s2 = 'fox'; bool b; b = s1.Contains(s2); int i; i = s1.IndexOf(s2);
ContainscallsIndexOf:Which calls
CompareInfo.IndexOf, which ultimately uses a CLR implementation.If you want to see how strings are compared in the CLR this will show you (look for CaseInsensitiveCompHelper).
IndexOf(string)has no options andContains()uses an Ordinal compare (a byte-by-byte comparison rather than trying to perform a smart compare, for example, e with é).So
IndexOfwill be marginally faster (in theory) asIndexOfgoes straight to a string search using FindNLSString from kernel32.dll (the power of reflector!).Updated for .NET 4.0 – IndexOf no longer uses Ordinal Comparison and so Contains can be faster. See comment below.