Dot-Net
StringBuilder 或 +=
我每秒收到大約 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()根據您對這些消息的處理方式,您可能還會發現另一種集合類型更合適(可能是 aQueue<string>),但這是您應該採取的方向。通過使用集合,每個單獨的字元串使用的記憶體將不計入集合對象的大小。相反,每個字元串只會為引用添加幾個字節。這將花費更長的時間來解決壓縮大對象堆的問題。如果切換到集合後仍有問題,可以使用流,並將字元串寫入磁碟。這樣,您一次在 RAM 中永遠不會有多個字元串。現在,您遇到問題的唯一方法是單個字元串是否為 85000 字節或更大。