c# - 使用 .net SerialPort 的内存泄漏,有更好的方法吗?

标签 c# .net serial-port

我有一个程序用于通过 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/

相关文章:

macos - 如何在 Mac OS X 10.9.5 上以编程方式读取低功耗蓝牙传输的数据?

c# - 将 Launch10=shell.exe 更改为另一个值...现在怎么办?

c++ - C、Linux 中的串口读取/打开错误

c# - BadImageFormatException 无法加载文件或程序集或其依赖项之一。试图加载格式不正确的程序

c# - 为什么不能在成员初始值设定项中使用 'this'?

c# - Windows 四月更新后我的应用程序停止提供静态文件

c# - DirectoryExists ("c:temp\\foo") 当目录不存在时返回真!

c# - WPF 如何在鼠标事件上绘制圆圈

c# - 单元测试与集成测试 : Entity Framework Core In memory

c# - 无法在面向 .NET 3.5 的 Visual Studio 2012 中的 C# 项目中使用 CLI 类库中的 CLR 类型并使用 Windows7.1SDK 工具集进行编译