我有一个程序用于通过 rs232 与硬件通信。该软件用于显示从硬件尽可能快地通过 rs232 推送的数据流。我遇到的问题是,随着时间的推移,分配给程序的私有(private)内存会爆炸,并且会很快使程序崩溃。如果我禁用硬件发送数据大约 2 分钟,那么软件可以清除内存,但前提是我暂停数据流。
我正在使用来自 SerialPort 的 DataReceived 事件,这似乎就是问题所在,因为即使 DataReceived 函数在其中不执行任何操作,它也会导致内存峰值。我唯一能想到的是,每次引发此事件时,它都会创建一个新线程来运行,而且它发生得如此之快,以至于计算机在数据进入时没有时间运行 GC。
是否有更有效的方法从 SerialPort 对象中提取数据?当我收到“NewLine”时,我只关心字符串?
谢谢,
约翰·维克斯
最佳答案
DataReceived 在不同的线程上执行。我遇到了非常快的数据问题,这个事件给我带来了问题。因此,我创建了一个线程并自己读取数据:
while (this.serialPort.IsOpen)
{
int b = this.serialPort.ReadByte();
if (b != -1)
{
// data is good here
}
}
但正如其他人所说,没有任何代码示例,我们无法为您提供太多帮助。
关于c# - 使用 .net SerialPort 的内存泄漏,有更好的方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4260380/