Quantcast
Channel: プログラミング
Viewing all articles
Browse latest Browse all 8706

C# 文字列の連結速度について(StringBuilderと+演算子) - Web系開発メモ

$
0
0

C#で文字列を結合する際のパフォーマンスを調べてみました。

目次

  1. 概要
  2. 検証1
  3. 検証2
  4. マイクロソフトの資料

1. 概要

今回の記事の概要は以下の通りです。

  • StringBuilderより、+の結合が速い場合もある。
  • StringBuilderは、結合数が分からない場合などに向いている。

2. 検証1

以下のコードを実行すると、+演算子を使う連結のほうが速かったです。

using System.Diagnostics;
using System.Text;

var watch =new Stopwatch();
watch.Start();
watch.Stop();

// +で連結
watch.Restart();
for (var i =0; i <100000000; i++) {
  var s ="str1"+"str2";
}
watch.Stop();
Console.WriteLine(watch.Elapsed);

// StringBuilderで連結
watch.Restart();
for (var i =0; i <100000000; i++) {
  var s =new StringBuilder();
  s.Append("str1").Append("str2");
}
watch.Stop();
Console.WriteLine(watch.Elapsed);

StringBuilderのコードは、インスタンス化する回数が多くなるほど遅くなりそうです。

3. 検証2

以下のコードだと、StringBuilderのほうが速かったです。

// +で連結
watch.Restart();
var str ="";
for (var i =0; i <100000; i++) {
  str +="str1";
}
watch.Stop();
Console.WriteLine(watch.Elapsed);

// StringBuilderで連結
watch.Restart();
var sb =new StringBuilder();
for (var i =0; i <100000; i++) {
  sb.Append("str1");
}
watch.Stop();
Console.WriteLine(watch.Elapsed);

StringBuilderのインスタンス化は一回となっています。

4. マイクロソフトの資料

Microsoftの資料だと、StringBuilderについて以下の記載がありました。

結合するソース文字列の数がわからないループ内の文字列を結合する場合、ソース文字列の実際の数は大きくなる可能性があります。 StringBuilderクラスは、このようなシナリオのために設計されています。


Viewing all articles
Browse latest Browse all 8706

Latest Images

Trending Articles