複数のスレッドから単純な文字列連結関数を呼び出しています。思うようにロックしました。ロックありまたはロックなしで多くのテストを行いました。それは決して失敗しませんでした。
私の質問は: 文字列連結をロックする必要がありますか?
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;
完全なテスト コードはこちら: Test Parallel String Concatenation