我正在从多个线程调用一个简单的字符串连接函数。我按照我的想法锁定了它。做了很多带锁或不带锁的测试。它从未失败过。
我的问题是:字符串连接是否必须被锁定?
private readonly object idLock = new object();
private string GetId(string input1, string input2, string input3)
{
lock (idLock)
return string.Format("{0}; {1}; {2}", input1, input2, input3);
}
我使用 PLINQ 测试了以下变体 - 10000000 次循环。以毫秒为单位的时间是:
// Time 5446
lock (idLock)
return string.Format("{0}; {1}; {2}", input1, input2, input3);
// Time 3728
lock (idLock)
return input1 + "; " + input2 + "; " + input3;
// Time 953
return string.Format("{0}; {1}; {2}", input1, input2, input3);
// Time 652
return input1 + "; " + input2 + "; " + input3;
完整的测试代码在这里:测试并行字符串连接