StringBuilderオブジェクトの内容をクリアする方法としては、以下のような方法が考えられます。
これら3つの方法を具体的なコードで示すと、以下のようになります。
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()
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を指定して作成する方法との差があまりなくなります。よってこの場合はどちらの方法が良いかは微妙になるでしょう。
Dim sb As New System.Text.StringBuilder() sb.Append("文字列を追加") 'インスタンスを再利用して、Capacityを変更する sb.Length = 0 sb.Capacity = 1024 'Capacityを指定して、新しいインスタンスを作成する sb = New System.Text.StringBuilder(1024)
System.Text.StringBuilder sb = new System.Text.StringBuilder(); sb.Append("文字列を追加"); //インスタンスを再利用して、Capacityを変更する sb.Length = 0; sb.Capacity = 1024; //Capacityを指定して、新しいインスタンスを作成する sb = new System.Text.StringBuilder(1024);
注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。