小编典典

是String.Contains()比String.IndexOf()快吗?

c#

我有大约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);

有趣的事实


阅读 735

收藏
2020-05-19

共1个答案

小编典典

Contains电话IndexOf

public bool Contains(string value)
{
    return (this.IndexOf(value, StringComparison.Ordinal) >= 0);
}

哪个调用CompareInfo.IndexOf,最终使用CLR实现。

如果要查看如何在CLR中比较字符串,这将向您显示(查找 CaseInsensitiveCompHelper
)。

IndexOf(string)没有选项,Contains()而是使用序数比较(逐字节比较,而不是尝试执行智能比较,例如使用é与é)。

因此IndexOf(从理论上来说)将稍微快一些IndexOf,直接使用kernel32.dll中的FindNLSString进行字符串搜索(反射器的功能!)。

更新了.NET 4.0 - 的IndexOf不再使用序号比较等都含有可以更快。 请参阅下面的评论。

2020-05-19