什么是计算在一个大的.NET字符串换行的最快的方法是什么?字符串、换行、最快、方法

由网友(以女王姿势゛俯视全世界)分享简介:有没有办法来改善这样的:Is there a way to improve this: private static int CountNewlines(string s){int len = s.Length;int c = 0;for (int i=0; i < len; i++){if (s[i] ==...

有没有办法来改善这样的:

Is there a way to improve this:

private static int CountNewlines(string s)
{
    int len = s.Length;
    int c = 0;
    for (int i=0; i < len;  i++)
    {
        if (s[i] == 'n') c++;
    }
    return c;
}

我特别担心的字符串项访问。不知道这是否只是指针运算,如C / C ++。

I'm particularly concerned about the Item accessor on the string. Not sure if it is just pointer arithmetic like C/C++.

推荐答案

我测试过这些实施

private static int Count1(string s)
{
    int len = s.Length;
    int c = 0;
    for (int i=0; i < len;  i++)
    {
        if (s[i] == 'n') c++;
    }
    return c+1;
}

private static int Count2(string s)
{
    int count = -1;
    int index = -1;

    do
    {
        count++;
        index = s.IndexOf('n', index + 1);
    }
    while (index != -1);

    return count+1;
}

private static int Count3(string s)
{
    return s.Count( c => c == 'n' ) + 1;
}


private static int Count4(string s)
{
    int n = 0;
    foreach( var c in s )
    {
        if ( c == 'n' ) n++;
    }
    return n+1;
}

private static int Count5(string s)
{
    var a = s.ToCharArray();
    int c = 0;
    for (int i=0; i < a.Length; i++)
    {
        if (a[i]=='n') c++;
    }
    return c+1;
}

下面是我的计时结果为100000迭代上〜25K的字符串。较低的速度更快。

Here are my timing results for 100000 iterations on a string of ~25k. Lower is faster.

              Time  Factor
Count1   4.8581503     1.4
Count2   4.1406059     1.2
Count3  45.3614124    13.4
Count4   3.3896130     1.0
Count5   5.9304543     1.7

奇怪的是,对我来说,枚举器实现了最快的对我来说,一个显著度 - 比最接近的执行速度快20%。结果是可重复的,而与该方法运行的顺序的。我也用一个热身阶段,以确保瞬态效应(JIT等)被提取出来。

Surprisingly, to me, the Enumerator implementation was fastest for me, by a significant degree - 20% faster than the next closest implementation. The results were repeatable, regardless of the order in which the methods were run. I also used a warmup phase to insure transient effects (jit, etc) were factored out.

这是一个发布版本(/优化+)

This was for a release build (/optimize+)

阅读全文

相关推荐

最新文章