在C#中,
StringBuilder.ToString()
的复杂度是什么?它是O(1),O(N)还是其他什么?StringBuilder.ToString()
的复杂度是什么?它是O(1),O(N)还是其他什么?这取决于框架版本;在旧版本中,StringBuilder
直接在一个 string
上工作,因此在使用 .ToString()
时没有额外的成本: 它直接将数据交给您(这可能意味着过大,但它确实起作用);因此是O(1)。
在新的框架版本中,它使用一个 char[]
后备缓冲区,因此现在当你使用 .ToString()
时,它可能需要复制 2 x Length
字节,使其为O(N)。
string
? - MarcinJuraszekAppend
更快,因为它推迟了工作直到字符串实际生成。这也意味着内存不需要连续(直到/除非)你生成一个实际的字符串,减少了SB在LOH上的可能性,减少了内存碎片化,并且比仅仅是内存不足而导致的内存碎片化更不容易受到OOM的影响。 - ServyToString
遍历当前和所有先前的缓冲区,并将它们全部附加到一个大缓冲区中。 - Servy