0

因此,根据我对stringvsStringBuilder的理解,字符串生成器实际上会修改自身的实例,而字符串只会创建一个新实例。因此,如果我正确理解这一点,那么通过对不断变化的变量使用字符串方法,我基本上最终可以使用所有内存,直到计算机需要转储它以腾出空间。

我正在做的是使用事件处理程序来监视串行通信。我将接收数据并解析出来,并将其显示在文本框中。事件处理程序当前使用字符串来完成此操作。考虑到更好的编程并且在不需要时不使用所有内存,我正在尝试清理我的代码。

我开始使用字符串生成器进行编码,并开始得到StringBuilder不包含 .contains 方法的构建错误。

基本上我很好奇我是否应该不理会它?我应该以不同的方式处理这个问题吗?我是否有正确的理解,这string将不可避免地使我失去记忆?

private void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
    SerialPort sp = (SerialPort)sender;

    string indata = sp.ReadExisting();
    rx.AppendText(Environment.NewLine + indata);
    string dataCheck = indata.ToUpper();
    if (dataCheck.Contains("CONNECT") || indata.Contains("CONNECTED"))
    {
        cState.Text = "Connected";
        connectLink();
    }
    if (dataCheck.Contains("NO CARRIER"))
    {
        cState.Text = "Disconnected";
        disconnect();
    }
    dataCheck = null;
}
4

1 回答 1

5

你错了;使用 String 不会(通常)导致内存不足。

如果您要进行大量连接,则使用字符串的效率较低,因为每次连接时都需要构建一个新字符串并丢弃旧字符串。
在这种情况下,您应该使用 StringBuilder 来构建字符串,然后ToString()在您想要显示它时调用它。

您的代码不包含任何连接,因此使用 StringBuilder 不会有任何好处。

于 2012-08-14T00:17:10.233 回答