Creating StringBuilder having specified capacity in C#

The StringBuilder class in C# provides several constructors to create instances with different initial capacities. When you specify a capacity, you're setting the initial buffer size that StringBuilder allocates for string operations, which can improve performance by reducing memory reallocations.

Syntax

Following are the main constructors for creating StringBuilder with specified capacity −

StringBuilder sb = new StringBuilder(int capacity);
StringBuilder sb = new StringBuilder(string value, int capacity);

Creating StringBuilder with Initial Capacity

You can create a StringBuilder with a specific initial capacity to optimize memory usage −

using System;
using System.Text;

public class Demo {
    public static void Main(string[] args) {
        StringBuilder strBuilder1 = new StringBuilder("Tim");
        StringBuilder strBuilder2 = new StringBuilder("Tom");
        StringBuilder strBuilder3 = new StringBuilder();
        StringBuilder strBuilder4 = new StringBuilder(5);
        
        strBuilder2 = strBuilder3;
        
        Console.WriteLine("Is StringBuilder3 equal to StringBuilder2? = " + strBuilder3.Equals(strBuilder2));
        Console.WriteLine("StringBuilder1 capacity = " + strBuilder1.Capacity);
        Console.WriteLine("StringBuilder2 capacity = " + strBuilder2.Capacity);
        Console.WriteLine("StringBuilder3 capacity = " + strBuilder3.Capacity);
        Console.WriteLine("StringBuilder4 capacity = " + strBuilder4.Capacity);
    }
}

The output of the above code is −

Is StringBuilder3 equal to StringBuilder2? = True
StringBuilder1 capacity = 16
StringBuilder2 capacity = 16
StringBuilder3 capacity = 16
StringBuilder4 capacity = 5

Default vs Custom Capacity

When no capacity is specified, StringBuilder uses a default capacity. Here's a comparison −

using System;
using System.Text;

public class Demo {
    public static void Main(string[] args) {
        StringBuilder strBuilder = new StringBuilder();
        Console.WriteLine("Default StringBuilder capacity = " + strBuilder.Capacity);
        
        StringBuilder strBuilder2 = new StringBuilder(20);
        Console.WriteLine("Custom StringBuilder capacity = " + strBuilder2.Capacity);
        
        StringBuilder strBuilder3 = new StringBuilder("Hello", 50);
        Console.WriteLine("StringBuilder with text and capacity = " + strBuilder3.Capacity);
        Console.WriteLine("Content: " + strBuilder3.ToString());
    }
}

The output of the above code is −

Default StringBuilder capacity = 16
Custom StringBuilder capacity = 20
StringBuilder with text and capacity = 50
Content: Hello

Capacity vs Length

Property Description
Capacity The maximum number of characters the current StringBuilder can hold before expanding
Length The actual number of characters currently stored in the StringBuilder

Performance Benefits of Setting Capacity

Setting an appropriate initial capacity can improve performance by avoiding multiple memory reallocations −

using System;
using System.Text;

public class Demo {
    public static void Main(string[] args) {
        StringBuilder sb1 = new StringBuilder(100);
        StringBuilder sb2 = new StringBuilder();
        
        Console.WriteLine("Before appending:");
        Console.WriteLine("sb1 capacity: " + sb1.Capacity + ", length: " + sb1.Length);
        Console.WriteLine("sb2 capacity: " + sb2.Capacity + ", length: " + sb2.Length);
        
        for (int i = 0; i < 10; i++) {
            sb1.Append("Hello ");
            sb2.Append("Hello ");
        }
        
        Console.WriteLine("\nAfter appending:");
        Console.WriteLine("sb1 capacity: " + sb1.Capacity + ", length: " + sb1.Length);
        Console.WriteLine("sb2 capacity: " + sb2.Capacity + ", length: " + sb2.Length);
    }
}

The output of the above code is −

Before appending:
sb1 capacity: 100, length: 0
sb2 capacity: 16, length: 0

After appending:
sb1 capacity: 100, length: 60
sb2 capacity: 64, length: 60

Conclusion

Setting a StringBuilder capacity helps optimize memory usage and performance. When you know approximately how much text you'll be building, specifying an initial capacity prevents multiple internal buffer reallocations as the StringBuilder grows.

Updated on: 2026-03-17T07:04:36+05:30

153 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements