gpt4 book ai didi

.net - StringBuilder 或 +=

转载 作者:行者123 更新时间:2023-12-02 20:07:44 25 4
gpt4 key购买 nike

我每秒收到大约 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,以这种速度,底层字符缓冲区本身也会很快变得足够大,从而卡在大对象堆上。这会给需要保持运行一段时间的应用程序的健康带来问题。

相反,我会使用 System.Collections.Generic.List<string>并称其为 .Add()每条新消息的方法。根据您对这些消息的处理方式,您可能还会发现另一种集合类型更合适(可能是 Queue<string> ),但这是您应该走的方向。通过使用集合,每个单独的字符串使用的内存将不计入集合对象的大小。相反,每个字符串只会添加几个字节以供引用。这将需要更长的时间才能遇到压缩大型对象堆的问题。

如果切换到集合后仍然遇到问题,您可以使用,并将字符串写入磁盘。这样,RAM 中一次就不会出现多个字符串。现在,唯一遇到问题的情况是单个字符串是否为 85000 字节或更大。

关于.net - StringBuilder 或 +=,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3359109/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com