Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
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.
