C#和C ++中字符串操作的不同基准

时间:2012-08-27 06:44:26

标签: c# c++ string

我在C ++和C#中有两个非常简单的代码 在c#

for (int counter = 0; counter < 100000; counter ++)
{
    String a = "";
    a = "xyz";
    a = a + 'd';
    a = a + 'c';
    a = a + 'h';
}

在c ++中

for (int counter = 0; counter < 100000; counter ++)
{
    string a = "";
    a.append("xyz");
    a = a + 'd';
    a = a + 'c';
    a = a + 'h';
}

奇怪的是c#代码执行的时间比c ++代码少1/20。 你能帮我找一下为什么会这样吗?以及如何更改我的c ++代码以加快速度。

2 个答案:

答案 0 :(得分:6)

这可能是实施的一个怪癖。例如,一个优化器可能已经发现未使用操作的结果。或者有人可能碰巧分配一个足够大的字符串来添加三个额外字符而不重新分配而另一个没有重新分配。或者可能是其他一百万件事。

使用“玩具”代码进行基准测试确实无济于事。我不认为结果适用于任何现实情况。

这段代码有很多明显的优化,例如:

string a;
for (int counter = 0; counter < 100000; counter ++)
{
    a = "xyz";
    a.append(1, 'd');
    a.append(1, 'c');
    a.append(1, 'h');
}

通过重用缓冲区并避免额外的分配/复制/自由循环,这可能会产生巨大的差异。

答案 1 :(得分:0)

对于大型字符串操作,请使用StringBuilder