如何StringBuilder类中实现?它是否在内部创建新的String对象每次我们添加的时间?
How the StringBuilder class is implemented? Does it internally create new string objects each time we append?
在.NET 2.0中在内部使用了字符串
类。 字符串
只是一成不变的外系统
命名空间,所以的StringBuilder
能做到这一点。
In .NET 2.0 it uses the String
class internally. String
is only immutable outside of the System
namespace, so StringBuilder
can do that.
在.NET 4.0 字符串
改为使用的char []
。
In .NET 4.0 String
was changed to use char[]
.
在2.0 的StringBuilder
这个样子
public sealed class StringBuilder : ISerializable
{
// Fields
private const string CapacityField = "Capacity";
internal const int DefaultCapacity = 0x10;
internal IntPtr m_currentThread;
internal int m_MaxCapacity;
internal volatile string m_StringValue; // HERE ----------------------
private const string MaxCapacityField = "m_MaxCapacity";
private const string StringValueField = "m_StringValue";
private const string ThreadIDField = "m_currentThread";
但在4.0,它看起来是这样的:
But in 4.0 it looks like this:
public sealed class StringBuilder : ISerializable
{
// Fields
private const string CapacityField = "Capacity";
internal const int DefaultCapacity = 0x10;
internal char[] m_ChunkChars; // HERE --------------------------------
internal int m_ChunkLength;
internal int m_ChunkOffset;
internal StringBuilder m_ChunkPrevious;
internal int m_MaxCapacity;
private const string MaxCapacityField = "m_MaxCapacity";
internal const int MaxChunkSize = 0x1f40;
private const string StringValueField = "m_StringValue";
private const string ThreadIDField = "m_currentThread";
所以很显然,这是从使用字符串
来使用改变了的char []
。
编辑:更新的答案,以反映在.NET 4的变化(我刚刚发现的)
Updated answer to reflect changes in .NET 4 (that I only just discovered).