Since C# strings are immutable, an existing string cannot be modified. So, if one tries to change a string either with the concatenation operator (
+
) or with the Insert
, PadLeft
, PadRight
, Replace
, or SubString
methods, an entirely new string is created—leaving the original string intact.
Therefore, operations which would alter strings—instead—cause additional memory to be allocated. Memory is a scarce resource. And, memory allocations are expensive in terms of memory and performance. Consequently, sometimes
String
class usage should be avoided.
The
StringBuilder
class is designed for situations when one needs to work with a single string and make an arbitrary number of iterative changes to it. Many StringBuilder
class methods are the same as those of the String
class. However, the string content of aStringBuilder
class can be changed without the necessity of allocating additional memory. Thus, operations on the StringBuilder
class will be much faster than operations on the String
class in certain situations. Paradoxically, just the the opposite can be true in other situations.
The
String
class is optimized and quite efficient for most cases. On the other hand, if strings must be modified, then the String
class can be a real resource waster. It must be appreciated that the String
class is really very intelligent in its memory handling in most everyday programming situations.
No comments :
Post a Comment