【问题标题】:Can I tune IndexOf selection?我可以调整 IndexOf 选择吗?
【发布时间】:2017-04-02 17:34:08
【问题描述】:

我已经对应用程序进行了很长时间的性能分析

原来大部分CPU都被IndexOf函数占用了

这里是函数

public static string func_Fix_Google_Source(string srSource)
{
    int irIndex = srSource.IndexOf("<div id=\"gt-form-c\">");
    return srSource.Substring(irIndex);
}

字符串的长度很重要吗?我相信我可能会缩短搜索字符串的长度

【问题讨论】:

    标签: c# .net performance indexof .net-4.6.2


    【解决方案1】:

    如果子字符串搜索成为瓶颈,您可以切换到高级算法,例如KMP

    当您有很多“误报”时,默认字符串搜索可能会非常昂贵,例如很多

    <div id="...
    

    在被搜索的文本中。

    每次在匹配未开始的位置发现上述前缀时,默认算法都会遵循它,以确认不存在匹配,然后转到下一个位置。相比之下,KMP 跳过了许多它已经看到的字符,从而提高了效率。

    【讨论】:

    • 回答。我假设 c# 本身不支持它,我必须编码?
    • 如我所想。使开始索引接近该字符串可以提高 100 多次 :)
    【解决方案2】:

    除了改进您的搜索方式(看起来您可能已经通过 cmets 完成了)之外,IndexOf(string) 重载使用当前文化进行比较。

    使用 StringComparision 重载进行 Ordinal 搜索将提供更好的性能。取决于你在做什么〜8x。

    int irIndex = srSource.IndexOf("<div id=\"gt-form-c\">", StringComparison.Ordinal);
    

    【讨论】:

      猜你喜欢
      • 2020-02-27
      • 2013-10-12
      • 1970-01-01
      • 1970-01-01
      • 2015-01-19
      • 1970-01-01
      • 2016-12-10
      • 2013-01-06
      • 1970-01-01
      相关资源
      最近更新 更多