LoginSignup
18
13

More than 3 years have passed since last update.

C#で性能のいい湯婆婆

Last updated at Posted at 2020-11-09

名前を削って「今日からお前の名前は~だ」を生成するC#のプログラムを高速化する方法を検討している記事がある。

C# で湯婆婆を実装してみる「性能のいい湯婆婆を目指して」

これにもう一つアプローチを加えてみたい。

文字列をたくさん連結する場合は、一般にStringBuilderを使うのがよいとされているが、一つの式で+でつなぐことができるならそうしたほうが速い。そうすると、+でつないだ文字列をすべて配列に格納してString.Concatを一回呼ぶコードが吐かれるからだ。

[Benchmark]
public string ConcatWorkstyle()
{
    var newName = Name[1];
    return "契約書だよ。そこに名前を書きな。\r\nフン。" + Name + "というのかい。贅沢な名だねぇ。\r\n今からお前の名前は" +
           newName + "だ。いいかい、" + newName + "だよ。分かったら返事をするんだ、" + newName + "!!";
}

ベンチマークは.NET Core 3.1 on AMD Ryzen 7 3800Xで。それでもZStringが最速なので、使える場合はZStringを使うべきかと。

|               Method |      Mean |    Error |   StdDev |
|--------------------- |----------:|---------:|---------:|
| TraditionalWorkstyle | 455.32 ns | 6.832 ns | 6.391 ns |
|         NewWorkstyle | 194.72 ns | 3.654 ns | 4.751 ns |
|     AnotherWorkstyle | 284.55 ns | 5.091 ns | 4.762 ns |
|     ZStringWorkstyle |  97.90 ns | 1.102 ns | 1.031 ns |
|      ConcatWorkstyle | 101.58 ns | 1.525 ns | 1.427 ns |

18
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
13