所以从我所了解的string
vs StringBuilder
是字符串生成器将实际修改自己的实例,而字符串将只是一个新的。所以,如果我正确地理解了这一点,那么通过对不断变化的变量使用字符串方法,我基本上可以最终使用所有内存,直到计算机需要转储它以腾出空间。字符串生成器是正确的选择吗?
我在做什么是使用事件处理程序来监视串行通信。我将接收数据并解析出来,并将其显示在文本框中。事件处理程序使用字符串来完成此目前。关注更好的编程,而不是用完所有的内存,当我不需要时,我正试图清理我的代码。
我开始用字符串生成器进行编码,并开始出现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;
}
对于与此类似的问题,[codereview.se]也是一个很好的地方...顺便说一句,你可以摆脱'dataCheck = null;'赋值,因为它没有可测量的效果记忆。垃圾收集器最终会收集'dataCheck',不管你是否指定null。 – Adam 2012-08-14 00:22:49
现在,你的代码被彻底打破了,这个问题是无关紧要的。 ReadExisting()永远不会给你一个字符串,如真实世界中的“CONNECT”。你只有在你调试你的代码时才会这样做。在没有调试器的情况下运行你的代码时,最好你会得到“CO”。 – 2012-08-14 00:34:22
'|| indata.Contains(“CONNECTED”)不需要,因为搜索“CONNECT”将覆盖这种情况。另外,你很可能想要搜索'dataCheck'。 – 2012-08-14 02:37:32