Dot-Net

StringBuilder 或 +=

  • December 5, 2013

我每秒收到大約 5 條消息。他們每個人都有一個字元串,我將它連接到一個包含所有接收到的消息的主字元串

   string _masterText = "";
   public void AddNewMessage(string text)  // this is going to be call at least 5 times/second
   {
       _masterText += text;    
   }

這是適當的方法嗎?或者我應該使用 StringBuilder,例如:

   StringBuilder _masterText = new StringBuilder();
   public void AddNewMessage(string text) // this is going to be call at least 5 times/second
   {
        _masterText.Append(text);  
   }

謝謝

StringBuilder 通常被認為是更好的選擇,但在這種情況下,我什麼都不會使用。

即使使用 StringBuilder,以這種速度,底層字元緩衝區本身很快就會大到足以卡在大對象堆上。這將對需要保持執行一段時間的應用程序的執行狀況造成問題。

相反,我會使用 a並為每條新消息System.Collections.Generic.List<string>呼叫它的方法。.Add()根據您對這些消息的處理方式,您可能還會發現另一種集合類型更合適(可能是 a Queue<string>),但這是您應該採取的方向。通過使用集合,每個單獨的字元串使用的記憶體將不計入集合對象的大小。相反,每個字元串只會為引用添加幾個字節。這將花費更長的時間來解決壓縮大對象堆的問題。

如果切換到集合後仍有問題,可以使用,並將字元串寫入磁碟。這樣,您一次在 RAM 中永遠不會有多個字元串。現在,您遇到問題的唯一方法是單個字元串是否為 85000 字節或更大。

引用自:https://stackoverflow.com/questions/3359109