How to find the MaxCapacity of a StringBuilder in C#?

The MaxCapacity property of a StringBuilder in C# returns the maximum number of characters that the StringBuilder can hold. This is a read-only property that represents the theoretical upper limit for the StringBuilder's capacity.

In most cases, the MaxCapacity is set to Int32.MaxValue (2,147,483,647), which is the maximum value for a 32-bit signed integer. However, you can specify a custom maximum capacity when creating a StringBuilder using specific constructor overloads.

Syntax

Following is the syntax to access the MaxCapacity property −

int maxCapacity = stringBuilder.MaxCapacity;

Following is the syntax to create a StringBuilder with a custom MaxCapacity −

StringBuilder sb = new StringBuilder(initialCapacity, maxCapacity);

Using Default MaxCapacity

When you create a StringBuilder without specifying a maximum capacity, it uses the default maximum capacity −

using System;
using System.Text;

public class Demo {
   public static void Main(String[] args) {
      StringBuilder strBuilder1 = new StringBuilder("Amy");
      StringBuilder strBuilder2 = new StringBuilder("Katie");
      StringBuilder strBuilder3 = new StringBuilder();
      StringBuilder strBuilder4 = new StringBuilder(5);

      Console.WriteLine("StringBuilder1 capacity = " + strBuilder1.Capacity);
      Console.WriteLine("StringBuilder1 maximum capacity = " + strBuilder1.MaxCapacity);
      Console.WriteLine("StringBuilder2 capacity = " + strBuilder2.Capacity);
      Console.WriteLine("StringBuilder2 maximum capacity = " + strBuilder2.MaxCapacity);
      Console.WriteLine("StringBuilder3 capacity = " + strBuilder3.Capacity);
      Console.WriteLine("StringBuilder3 maximum capacity = " + strBuilder3.MaxCapacity);
      Console.WriteLine("StringBuilder4 capacity = " + strBuilder4.Capacity);
      Console.WriteLine("StringBuilder4 maximum capacity = " + strBuilder4.MaxCapacity);
   }
}

The output of the above code is −

StringBuilder1 capacity = 16
StringBuilder1 maximum capacity = 2147483647
StringBuilder2 capacity = 16
StringBuilder2 maximum capacity = 2147483647
StringBuilder3 capacity = 16
StringBuilder3 maximum capacity = 2147483647
StringBuilder4 capacity = 5
StringBuilder4 maximum capacity = 2147483647

Using Custom MaxCapacity

You can specify a custom maximum capacity to limit how large the StringBuilder can grow −

using System;
using System.Text;

public class Demo {
   public static void Main(String[] args) {
      StringBuilder strBuilder1 = new StringBuilder(10, 50);
      StringBuilder strBuilder2 = new StringBuilder("Hello", 100);
      
      Console.WriteLine("StringBuilder1 initial capacity = " + strBuilder1.Capacity);
      Console.WriteLine("StringBuilder1 maximum capacity = " + strBuilder1.MaxCapacity);
      Console.WriteLine("StringBuilder2 capacity = " + strBuilder2.Capacity);
      Console.WriteLine("StringBuilder2 maximum capacity = " + strBuilder2.MaxCapacity);
      Console.WriteLine("StringBuilder2 length = " + strBuilder2.Length);
   }
}

The output of the above code is −

StringBuilder1 initial capacity = 10
StringBuilder1 maximum capacity = 50
StringBuilder2 capacity = 16
StringBuilder2 maximum capacity = 100
StringBuilder2 length = 5

Capacity vs MaxCapacity

Property Description Modifiable
Capacity Current allocated buffer size Yes (can be increased or decreased)
MaxCapacity Maximum possible buffer size No (read-only, set at creation)
Length Current number of characters Yes (can be modified)

Practical Example with Capacity Expansion

using System;
using System.Text;

public class Demo {
   public static void Main(String[] args) {
      StringBuilder sb = new StringBuilder("Hello", 20);
      
      Console.WriteLine("Initial state:");
      Console.WriteLine("Length = " + sb.Length);
      Console.WriteLine("Capacity = " + sb.Capacity);
      Console.WriteLine("MaxCapacity = " + sb.MaxCapacity);
      
      sb.Append(" World! This is a longer string.");
      
      Console.WriteLine("\nAfter appending:");
      Console.WriteLine("Length = " + sb.Length);
      Console.WriteLine("Capacity = " + sb.Capacity);
      Console.WriteLine("MaxCapacity = " + sb.MaxCapacity);
      Console.WriteLine("Content: " + sb.ToString());
   }
}

The output of the above code is −

Initial state:
Length = 5
Capacity = 16
MaxCapacity = 20

After appending:
Length = 37
MaxCapacity = 20
Content: Hello World! This is a longer string.

Conclusion

The MaxCapacity property returns the maximum number of characters a StringBuilder can hold. By default, it's set to Int32.MaxValue, but you can specify a custom limit during construction. Understanding MaxCapacity helps in memory management and prevents unexpected capacity expansion in memory-constrained scenarios.

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

315 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements