Char
arrayA C# char
array stores string
data. Each character can be accessed (and changed) without copying the rest of the characters. It enables optimizations.
A char
array is an alternative to using StringBuilder
for quickly creating string
data. We evaluate StringBuilder
and compare it to character arrays.
First we create new char
arrays. When you use the new operator, the execution engine allocates memory on the managed heap.
Char
is a value type so the value itself, not a reference, is stored in the storage location.using System; char[] array1 = { 'a', 'b', 'c' }; char[] array2 = new char[] { 'a', 'b', 'c' }; char[] array3 = new char[3]; array3[0] = 'a'; array3[1] = 'b'; array3[2] = 'c'; // Write total length. Console.WriteLine("LENGTH: {0}", array1.Length + array2.Length + array3.Length);LENGTH: 9
char
arrayCharacter arrays can be used to store character data such as letters or numbers. Here we append characters one-by-one to an array using the char
data type.
char
, 2 bytes are copied on the stack.char
array. We assign each index to the char
we want to append. We use the string
constructor.StringBuilder
here. With StringBuilder
, you could keep appending items to the buffer after the 100th char
.char
array is much faster than the StringBuilder
.using System; using System.Diagnostics; using System.Text; const int _max = 1000000; var s1 = Stopwatch.StartNew(); // Version 1: use a new char array. for (int i = 0; i < _max; i++) { char[] buffer = new char[100]; for (int v = 0; v < 100; v++) { buffer[v] = 'a'; } string result = new string(buffer); } s1.Stop(); var s2 = Stopwatch.StartNew(); // Version 2: use a StringBuilder. for (int i = 0; i < _max; i++) { StringBuilder builder = new StringBuilder(100); for (int v = 0; v < 100; v++) { builder.Append('a'); } string result = builder.ToString(); } s2.Stop(); Console.WriteLine(((double)(s1.Elapsed.TotalMilliseconds * 1000000) / _max).ToString("0.00 ns")); Console.WriteLine(((double)(s2.Elapsed.TotalMilliseconds * 1000000) / _max).ToString("0.00 ns")); 86.30 ns char array 288.69 ns StringBuilder
Char
arrays are faster because they have fewer features. Meanwhile StringBuilder
handles many cases and has many methods.
StringBuilder
is easy to use and a great optimization, but it is far slower in simple cases. It can help in real programs.char
arrays as an improvement in the alphanumeric sorting algorithm. This improved performance.Char
arrays can be around 7 times faster on certain tasks. Char
buffers have a big performance advantage.Using char
arrays allows us to use more lower-level algorithms with greater performance. The char
array code forces us to have more "coding discipline."
char
arrays (like the fixed length).StringBuilder
could have extra chars appended, but the char
array wouldn't allow that.IndexOutOfRangeException
that would be thrown is useful for debugging the algorithm.Using char
arrays is better when you know in advance the number of characters. StringBuilder
is fast and useful, but using char
arrays is sometimes more appropriate.