最近,我尝试编写一个简单的brutforce字符串搜索,并将其与性能中的本机.NET4实现进行比较。然而,我感到震惊,因为与原生的.NET 4+实现相比,我的自定义方法在某些方面具有x3性能提升。这一切都在发布模式下使用不同版本的.NET框架进行了测试。
不知何故,.NET 4+ String.IndexOf非常慢。所以我在旧的.NET 3-版本上进行了测试,发现本机实现的速度比最新的.NET版本要快。
以下是代码:http://pastebin.com/GB5w7FXz
它的要点是针对我的自定义方法测试大量本机方法:
private static int FindSubstringCustom(string text, string substring)
{
int cachedTextLength = text.Length;
int cachedSubstringLength = substring.Length;
bool success = true;
for (int i = 0; i < cachedTextLength; ++i)
{
if (text[i] == substring[0])
{
success = true;
for (int j = 1; j < cachedSubstringLength; ++j)
{
if (text[i + j] != substring[j])
{
success = false;
break;
}
}
if (success)
{
return i;
}
}
}
return -1;
}
我使用Visual Studio 2015 Community Edition运行它。简单的控制台应用程序。
我仍然认为我犯了一些非常愚蠢的错字,但我找不到它。我的方法返回正确的结果也无济于事。
答案 0 :(得分:-1)
对于3个测试中的2个(发布模式),您的代码慢于我的机器上的标准代码(对于.Net 4,.Net 4.6.1,.Net 3.5)。
另外请注意Microsoft的实现会做更多需要花费更多时间的事情:
ArgumentOutOfRangeException
,ArgumentNullException
....等等。这对测试代码有很大影响,因为它经常被执行数千次。为了它的价值,here is their current implementation。您可以使用自己的代码IMO做得更好。