DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

StringBuilderの内容をクリアする

StringBuilderオブジェクトの内容をクリアする方法としては、以下のような方法が考えられます。

  1. 「new StringBulder」で新しいインスタンスを作成する。
  2. StringBulder.Lengthプロパティに 0 を設定する。
  3. .NET Framework 4.0で追加されたStringBuilder.Clearメソッドを呼び出す。

これら3つの方法を具体的なコードで示すと、以下のようになります。

VB.NET
コードを隠すコードを選択
Dim sb As New System.Text.StringBuilder()
sb.Append("文字列を追加")

'新しいインスタンスを作成する
sb = New System.Text.StringBuilder()

'Lengthプロパティを0にする
sb.Length = 0

'Clearメソッドを呼び出す(.NET Framework 4.0以降)
sb.Clear()
C#
コードを隠すコードを選択
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append("文字列を追加");

//新しいインスタンスを作成する
sb = new System.Text.StringBuilder();

//Lengthプロパティを0にする
sb.Length = 0;

//Clearメソッドを呼び出す(.NET Framework 4.0以降)
sb.Clear();

この内Clearメソッドは、Lengthプロパティを0にして自分自身を返しているだけですので、実質的にLengthプロパティを0にする方法と同じです。(ただ、メソッドになっているため分かりやすい、自分自身のStringBuilderオブジェクトを返すため続けて別のメソッドを呼び出せるなどの利点があります。)

新しいインスタンスを作成する方法とLengthを0にする方法を比較すると、前者は新しいインスタンスを作成し、古いインスタンスを破棄するため、後者のインスタンスを再利用する方法と比べて無駄が多いと考えられます。実際「Clear C# StringBuilder : C# 411」によると、Lengthを0にした方法のほうが速いそうです。

ただしLengthを0にする方法でクリアした時、内容はクリアされますが、Capacityプロパティはそのままですので、メモリは解放されません。StringBuilderを再利用してCapacityを変えるには、Lengthを0にしてさらにCapacityも設定しなおせば良いのですが、そうすると新しいインスタンスをCapacityを指定して作成する方法との差があまりなくなります。よってこの場合はどちらの方法が良いかは微妙になるでしょう。

VB.NET
コードを隠すコードを選択
Dim sb As New System.Text.StringBuilder()
sb.Append("文字列を追加")

'インスタンスを再利用して、Capacityを変更する
sb.Length = 0
sb.Capacity = 1024

'Capacityを指定して、新しいインスタンスを作成する
sb = New System.Text.StringBuilder(1024)
C#
コードを隠すコードを選択
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append("文字列を追加");

//インスタンスを再利用して、Capacityを変更する
sb.Length = 0;
sb.Capacity = 1024;

//Capacityを指定して、新しいインスタンスを作成する
sb = new System.Text.StringBuilder(1024);

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • .NET Tipsをご利用いただく際は、注意事項をお守りください。