加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 01:39:27 所属栏目:百科 来源:网络整理
导读:我有一个用于通过rs232与硬件通信的程序.该软件用于显示通过rs232从硬件推送到尽可能快的数据流.我遇到的问题是,随着时间的推移,分配给程序的私有内存会爆炸,并且会很快崩溃程序.如果我禁止硬件发送数据大约2分钟,那么软件可以清除内存,但只有暂停数据流. 我
我有一个用于通过rs232与硬件通信的程序.该软件用于显示通过rs232从硬件推送到尽可能快的数据流.我遇到的问题是,随着时间的推移,分配给程序的私有内存会爆炸,并且会很快崩溃程序.如果我禁止硬件发送数据大约2分钟,那么软件可以清除内存,但只有暂停数据流.

我正在使用SerialPort中的DataReceived事件,这似乎是问题所在,因为即使DataReceived函数在其中没有任何内容,它也会导致内存峰值.我唯一能想到的是,每次引发此事件时,它都会创建一个新线程来运行,并且它的发生速度非常快,以至于计算机没有时间在数据进入时运行GC.

是否有更有效的方法从SerialPort对象中提取数据?收到“NewLine”时我只关心一根弦?

谢谢,

约翰维克斯

解决方法

我在C#中开发了一种状态驱动的串口编程语言,我相信它确实解决了每个人遇到的几乎所有串口问题.

请您使用以下简单状态尝试并检查内存泄漏?

state Init
  recv();
  $len = length($DATA_PACKET);
  if("$len > 0") {
    log($DATA_PACKET,Debug);
  }
end state

Screen shots

Project homepage

Download

如果您有任何疑问,请随时提出.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读