2

我有两个非常简单的 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++ 代码以变得更快。

4

2 回答 2

6

这可能是实现的一个怪癖。例如,一个优化器可能已经发现操作的结果没有被使用。或者可能碰巧分配了一个足够大的字符串以添加三个额外的字符而无需重新分配,而另一个则没有。或者它可能是一百万个其他的东西。

用“玩具”代码进行基准测试确实没有帮助。我不会假设结果适用于任何现实情况。

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

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

通过重用缓冲区并避免额外的分配/复制/释放周期,这可能会产生巨大的影响。

于 2012-08-27T06:47:40.643 回答
0

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

于 2012-08-27T06:50:33.497 回答