C#应用程序在20-30分钟后变慢?

C#应用程序在20-30分钟后变慢?,c#,serial-port,C#,Serial Port,我有一个从串口读取数据的c#应用程序。我已经将串行读取处理程序以1秒的间隔放入计时器中,因为数据每隔1秒出现一次 我准时打电话 delegate void SetTextCallback(string text); ReceivedText(serialPort1.ReadExisting()); 我还在richtextbox中显示接收到的数据,只是为了检查它是否获得了正确的数据。 但15-20分钟后,应用程序的速度变慢,甚至不会响应 private void ReceivedText(st

我有一个从串口读取数据的c#应用程序。我已经将串行读取处理程序以1秒的间隔放入计时器中,因为数据每隔1秒出现一次 我准时打电话

delegate void SetTextCallback(string text);
ReceivedText(serialPort1.ReadExisting());
我还在richtextbox中显示接收到的数据,只是为了检查它是否获得了正确的数据。 但15-20分钟后,应用程序的速度变慢,甚至不会响应

 private void ReceivedText(string text)
 {
        if (this.rtbReceived.InvokeRequired)
        {
            SetTextCallback x = new SetTextCallback(ReceivedText);
            this.Invoke(x, new object[] { (text) });
        }
        else
        {
            this.rtbReceived.Text += text;
            serialdata = text;
            if (serialdata.Length > 0 &&
                serialdata.Length < 42 &&
                serialdata.Contains("#") ||
                serialdata.StartsWith(" #"))
            {
                serialdata.Trim();
                splitdata = serialdata.Split(' ');

                try
                {
                    txtBathTemp.Text = splitdata[3];
                    txtBaroPressure.Text = splitdata[4];

                    double stemp = double.Parse(splitdata[5]);

                    txtSampleTemp.Text = (Math.Round(stemp, 2)).ToString();
                }
                catch (Exception EX)
                { 
                    MessageBox.Show(ex.Message);
                }
            }
        }
    }
private void ReceivedText(字符串文本)
{
if(this.rtbReceived.invokererequired)
{
SetTextCallback x=新的SetTextCallback(ReceivedText);
调用(x,新对象[]{(文本)});
}
其他的
{
this.rtbReceived.Text+=文本;
串行数据=文本;
如果(serialdata.Length>0&&
serialdata.Length<42&&
serialdata.Contains(“#”)||
serialdata.StartsWith(“#”)
{
serialdata.Trim();
splitdata=serialdata.Split(“”);
尝试
{
txtbathstemp.Text=splitdata[3];
txtbaroppressure.Text=拆分数据[4];
double stemp=double.Parse(splitdata[5]);
txtSampleTemp.Text=(Math.Round(stemp,2)).ToString();
}
捕获(例外情况除外)
{ 
MessageBox.Show(例如Message);
}
}
}
}

这个.rtbReceived.Text有可能在一段时间后长大。即使它不使用大量内存,不断地操作
字符串
也没有什么效果。您是否考虑过改用
StringBuilder

发布的代码中没有明显的内容。您是否将数据附加到某个UI控件?或者,您是否意外地重复订阅了同一事件,但从未取消订阅?否不附加到任何Ui控件。不小心重复订阅了同一活动,但从未取消订阅我如何检查?您的文本增长了多大?在将+=连接到文本时,它会生成字符串的新副本,在多次连接时,这是一个性能杀手,我建议在讨论大量连接时使用更有效的StringBuilder。您知道应用程序速度减慢的原因吗?我的意思是-你是否观察到应用程序进程的高CPU使用率和高内存使用率?问题似乎比接收方法大一点。分享一些代码,说明如何将数据附加到文本框、订阅事件等。当任务管理器中仅接收串行数据时,内存使用量约为13-18 K。该应用程序也有crystal report。。当我在任务管理器中加载crystal report时,内存从14k变为30-40K。。关闭水晶报表后,内存仍保持在40K及以上。在那之后,gui的速度变慢了。但我在结束后处理了crystal report。我删除了rich textbox。。但在加载和关闭crystal report后,内存似乎会变高,然后保持不变。