2.22. Improving StringBuilder Performance
Problem
In an attempt to
improve string-handling performance, you have converted your code to
use the StringBuilder
class. However, this change
has not improved performance as much as you had hoped.
Solution
The chief advantage of a StringBuilder
object over
a string
object is that it preallocates a default
initial amount of memory in an internal buffer in which a string
value can expand and contract. When that memory is used, however,
.NET must allocate new memory for this internal buffer.
You can reduce the
frequency with which this occurs by explicitly defining the size of
the new memory using either of two techniques. The first approach is
to set this value when the StringBuilder
class
constructor is called. For example, the code:
StringBuilder sb = new StringBuilder(200);
specifies that a StringBuilder
object can hold
200
characters before new memory must be
allocated.
The second approach is to change the value after the
StringBuilder
object has been created, using one
of the following properties or methods of the
StringBuilder
object:
sb.Capacity = 200; sb.EnsureCapacity(200);
Discussion
As noted in previous recipes in this chapter, the
string
class is immutable; once a string is
assigned to a variable of type string
, that
variable cannot be changed in any way. So changing the contents of a
string variable entails the creation of a new
string
containing the modified string. The
reference variable of type string
must then be changed to reference ...
Get C# Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.