我有大约2000个字符的字符串缓冲区,需要检查缓冲区是否包含特定的字符串。 将在每个Web请求的ASP.NET 2.0 Web应用程序中进行检查。
有人知道String.Contains方法是否比String.IndexOf方法执行得更好吗?
// 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);
有趣的事实
Contains电话IndexOf:
Contains
IndexOf
public bool Contains(string value) { return (this.IndexOf(value, StringComparison.Ordinal) >= 0); }
哪个调用CompareInfo.IndexOf,最终使用CLR实现。
CompareInfo.IndexOf
如果要查看如何在CLR中比较字符串,这将向您显示(查找 CaseInsensitiveCompHelper )。
IndexOf(string)没有选项,Contains()而是使用序数比较(逐字节比较,而不是尝试执行智能比较,例如使用é与é)。
IndexOf(string)
Contains()
因此IndexOf(从理论上来说)将稍微快一些IndexOf,直接使用kernel32.dll中的FindNLSString进行字符串搜索(反射器的功能!)。
更新了.NET 4.0 - 的IndexOf不再使用序号比较等都含有可以更快。 请参阅下面的评论。