回答
尊者J.飛碟雙向提供正是這個問題的一個很好的分析:的StringBuilder
[編輯:當時,這個問題問StringList
]
你的意思StringCollection
?這最初使用空的ArrayList
,所以答案是0.你沒有選擇改變它。當你第一次添加一個物品時,容量跳到4,然後在填充時使用加倍策略。
如果你的意思List<string>
,那麼它是相似的(空T[]
,而不是一個ArrayList
),但你可以,如果你需要初始化一個已知的大小(即你知道你有多少數據預期)。同樣,第一次你Add
到List<T>
大小跳到4,然後每填滿一次就翻倍。
我認爲他確實是指StringBuilder,沒有別的。 – 2008-10-29 09:38:04
對不起,我感到困惑 – 2008-10-29 09:42:54
啊;所以對不同的問題很好的回答......哦,好的;-( – 2008-10-29 10:32:10
默認容量爲16個字符(我用.net反射來查找出來)。
默認值爲16,這似乎是.NET框架中任何類型的數組或列表的默認容量。 您需要在您的StringBuilder上重新分配的次數越少越好。 同時,也沒有必要分配太多所需的東西。
我通常使用某種類型的粗略估計來實例化StringBuilder,以確定StringBuilder的最終大小。例如,這可以基於稍後將用於構建字符串的一些迭代計數,乘以此迭代中每個項目所需的大小。
// where 96 is a rough estimate of the size needed for each item
StringBuilder sb = new StringBuilder (count * 96);
for (int i = 0; i < count; i++)
{
...
}
當一個StringBuilder的大小是用於寫入下一個字符串太小, StringBuilder的內部字符數組被重新分配給它的兩倍當前大小。
今天這個問題作爲另一個副本來了,但我注意到一部分沒有回答。默認情況下(假設這意味着「當沒有用足夠大的字符串創建時」)是16,如同人們所說的那樣,但是當你應該改變它的時候,我什麼都看不到。可以做爲一種可能的優化,事實上,選擇16與優化是相反的優化選擇價值和方法以便特別適合特定情況或可能情況的子集(不是「 「一般來說,雖然這就是我們經常使用這個詞的原因),在這裏,設計師必須處理概括 - 挑選值和方法,以便在廣泛的案例中給出相當好的表現
他們走得越小,內存的使用就越少。
他們去的越大,處理更大字符串的重新分配越少。
在某些情況下,二元輪(兩個整數)可能會比其他數字具有更好的性能的原因有幾個,所以他們選擇了其中一個,但除了選擇4或16或1024之外是平衡不同可能值的問題。
有人使用StringBuilder
而不是設計它,可能有一個更好的想法,他們可能需要什麼大小。
如果他們打算去Append
5個1位數的數字和長度總共爲43個字符的字符串,那麼StringBuilder
的總長度將是48個字符,所以他們應該使用一個容量爲對於48長度的字符串,48總是最有效的尺寸。
如果他們正在做的事情,其中有可能是約23和34個字符之間的任何長度,就應該使用34
如果他們正在做的事情哪裏有可能永遠不會超過60個字符,但現在每然後可能有,他們應該使用64(不要爲大多數部分重新分配,並在少數情況下獲得上面提到的權力 - 效益)。
如果在這方面無法得出結論,或者至少很難這樣做,而不是性能熱點,那麼您應該使用默認設置。
我們可以使用StringBuilder
類的能力屬性找到容量:
StringBuilder builder = new StringBuilder();
var capacity = builder.Capacity;
var maxCapacity = builder.MaxCapacity;
這裏容量定義StringBuilder
默認容量。
StringBuilder
是Max Capacity
與最大值Int32
相同。字符串助洗劑
缺省容量爲16個字符, 和STRING-生成器的最大容量爲2147483647字符。
所以沒有必要擔心存儲長響應!
- 1. 爲什麼StringBuilder的默認容量是16個字符?
- 2. StringBuilder的容量如何變化?
- 3. 大容量內存默認目錄
- 4. PHP:htacess默認變量
- 5. 返回StringBuilder的內容
- 6. googleVis MotionChart的默認變量
- 7. Yaml:變量的默認值
- 8. Perl的默認變量$ _
- 9. 如何在javac中默認強制使用StringBuffer而不是StringBuilder?
- 10. Jquery默認div內容
- 11. 微小MCE默認內容
- 12. Ckeditor發送默認內容
- 13. 更改Scala的默認容量/負載因子mutable.HashMap
- 14. 什麼是C++字符串的默認容量?
- 15. TypeScript默認常量導出
- 16. Java默認變量值
- 17. Sass變量默認範圍
- 18. 默認變量在python
- 19. 的StringBuilder()與StringBuilder的(空)VS的StringBuilder( 「」)
- 20. WordPress Docker容器的默認配置
- 21. 失敗時的默認內容require_once
- 22. django-cms中的默認內容插件
- 23. 默認字符串內容的更改
- 24. 剃刀部分的默認內容
- 25. STL容器的默認初始化
- 26. 量角器從iframe切換到默認內容
- 27. JavaScript變量的值,默認情況下PHP變量,並裝載片內容
- 28. 產量和默認情況||不輸出默認情況下
- 29. MySQL默認與MariaDB默認
- 30. 優化將StringBuilder的內容寫入ServletResponse
這是一個很好的提醒,我應該編輯文章以包含「容量「某處:) – 2008-10-29 10:38:47