问题是这样的:
写了一个WinForm程序,用到了 SerialPort 控件发送和接收串口数据,每秒一次发送数据,代码如下: //打开
private void Form1_Load(object sender, EventArgs e)
{
serialPort1.Open();
Thread.Sleep(200);
serialPort1.WriteLine("#020208");
}
//接收并处理数据
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
try
{
string str = serialPort1.ReadExisting();
//处理数据并更新到界面上 (更新的数据量不多)
......
}
catch
{
SaveErrorLog();
}
finally
{
GC.Collect();
Thread.Sleep(1000);
serialPort1.WriteLine("#020208");
}
}
程序很简单,可以正确接收数据,但是在任务管理器上发现程序开始的时候线程几乎是每秒加一个,过了一天之后发现尽然有513个线程,而且内存达到了一百多兆,不是很明白是哪里有问题?
写了一个WinForm程序,用到了 SerialPort 控件发送和接收串口数据,每秒一次发送数据,代码如下: //打开
private void Form1_Load(object sender, EventArgs e)
{
serialPort1.Open();
Thread.Sleep(200);
serialPort1.WriteLine("#020208");
}
//接收并处理数据
private void serialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
try
{
string str = serialPort1.ReadExisting();
//处理数据并更新到界面上 (更新的数据量不多)
......
}
catch
{
SaveErrorLog();
}
finally
{
GC.Collect();
Thread.Sleep(1000);
serialPort1.WriteLine("#020208");
}
}
程序很简单,可以正确接收数据,但是在任务管理器上发现程序开始的时候线程几乎是每秒加一个,过了一天之后发现尽然有513个线程,而且内存达到了一百多兆,不是很明白是哪里有问题?
catch(Exception ex)
{
SaveErrorLog(ex.Message);//这里注释掉也没用
}
finally
{
GC.Collect();
Thread.Sleep(1000);
serialPort1.WriteLine("#020208");
}
serialPort1.WriteLine("#020208");这一句好像一直在调用自己,这样的话就会一直增加内存使用,幸亏c#内存是自动管理的,如果c++的话估计运行一天机器就死掉,无内存可用了。还有,强制垃圾回收器工作并一定不能达到你想的回收内存的效果。本人愚见,对你的控件不熟悉,仅供参考