IndexOf(char) 与 Contains(string) 用于检查字符串中字符是否存在的性能

bit*_*kar -2 c# string performance contains indexof

我想知道是否

string.IndexOf(char) 
Run Code Online (Sandbox Code Playgroud)

更快的

string.Contains(string) 
Run Code Online (Sandbox Code Playgroud)

目的是检查单个字符是否存在于string. 我知道根据要求我应该使用,string.Contains(string)但这不是这个问题的重点。我确实尝试反汇编 mscorlib.dll以比较它们的实现,但我找不到

 string.IndexOf(char)
Run Code Online (Sandbox Code Playgroud)

因为它是在CLR 本身内实现的。实施

 string.Contains(string)
Run Code Online (Sandbox Code Playgroud)

不过看起来很重

Dmi*_*nko 5

只需测试并查看

  String source = new String('a', 10000000) + "b" + new String('c', 10000000);

  Stopwatch sw = new Stopwatch();

  sw.Start();

  // Just an estimation
  int result = source.IndexOf('b');
  // int result = source.IndexOf("b");
  // Boolean result = source.Contains("b");
  // Boolean result = source.Contains('b');

  sw.Stop();

  int time = sw.ElapsedMilliseconds;
Run Code Online (Sandbox Code Playgroud)

在我的工作站(I5 3.2千兆赫,净5.0 64位)大约需要10毫秒Char38毫秒String

编辑:性能的结果是

  IndexOf(Char)     10 -- Fastest
  IndexOf(String)   38 
  Contains(Char)   100 -- Slowest
  Contains(String)  41
Run Code Online (Sandbox Code Playgroud)

所以IndexOf(String)Contains(String)大致相同