vb编写的串口程序运行几个小时以后,速度越来越慢,近似于死机状态,没有大量的数据库操作,有很多timer控件,不知什么原因,急,在线等!

amityliu 2008-02-20 11:26:47
vb编写的串口程序运行几个小时以后,速度越来越慢,近似于死机状态,
但一开始并没有出现此情况。

没有大量的数据库操作。

用到将近10个timer控件,但是只有2个一直在工作中,其余都是满足一定条件才使用,用完立即关闭。

这2个定时器(Timer1 和Timer2)的作用是 判断串口是否通信正常。

%向下位机发送状态查询命名(若正常下位机会有响应)
Private Sub Timer1_Timer()
%Timer1.interval=3000
%程序段略
End Sub

Timer1控件命令发送后,若正常下位机会有响应,则置布尔型变量s=true,否则s仍为初始值s=false

%判断下位机响应
Private Sub Timer2_Timer()
%Timer2.interval=4000
if s=true then
s=false
else
%报警,显示串口通信失败 程序段略
endif
End Sub

不是什么原因造成近似于死机状态,与tiemr有关吗?怎么改?急,在线等!
...全文
1060 点赞 收藏 22
写回复
22 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
swift19221 2010-08-05
呵呵,还真有不少人犯这种错误啊
对 text1.text = text1.text & str
这样的操作是相当耗时的

解决的办法是
str = str & strAdd
text1.text = str

str设置一定的大小,注意不要溢出
回复
yl301 2009-08-03
xue xi la
回复
amityliu 2008-03-14
帖子发了好久了,不好意思,今天结帖给分!

正如shaoke所说的,长时间通讯数据使得text.text 对象不断扩大,导致死机。只要将text.text在适当的时候清空即解决问题!

谢谢各位的帮助!谢谢shaoke!谢谢csdn!每次都能从csdn得到想要的答案!
回复
shakoe 2008-02-22
简洁的说在写可能长时间运行的代码的时候。

应该注意可能无限被扩大的一些对象。


特别注意: text.text list.list

其他应该每什么问题,VB的定时器还是比较稳定的,我想开个2,3十个没啥问题。
回复
shakoe 2008-02-22


我以前也碰到过这个事情,可以和楼主分享一下经验。

VB对资源的释放很多程度都不需要程序员自己来做的,所有有些地方容易忽略。

记得有一次,我们碰到了如此的情况


经过了大量的检查,发现是在一个记录状态的地方,一直在象一个TEXT控件写入文本

短时间内是没什么问题

在长时间后,程序的速度越来越慢,占用CPU越来越厉害。。

后来,及时清理控制了TEXT控件的TEXT长度,问题就解决了,
回复
meilidexue 2008-02-22
用到10个time控件,有点多,应该考虑程序设计思路!!
回复
chinaren10101 2008-02-22
先把串口处理数据那一块屏蔽掉,看是否还是这样.有可能是处理不当造成的,我遇到过类似的问题.
回复
程晨c 2008-02-22
根据功能划分为模块,每个模块用dll实现,保证速度没有问题。
回复
vb的timer就是耗资源的。
回复
amityliu 2008-02-21
TomyChoi
還有看看會不會十個定時器同時被起動,裏面的代碼在不停的等待處理的可能


共有四个定时器是同时被启动的,问题在这里吗?
回复
amityliu 2008-02-21
请帮帮忙啊
回复
TomyChoi 2008-02-21
還有看看會不會十個定時器同時被起動,裏面的代碼在不停的等待處理的可能
回复
lqq7072000 2008-02-21
分析边界条件,包括串口数据,定时器使用,数据库读写,还有延时等等...的最大上限
回复
amityliu 2008-02-21
谢谢TomyChoi 回复

如果是这个问题,怎样分析哪些资源没被释放吗?

对于用到的数据库ADO对象,在退出软件Form_Unload里都释放了
回复
TomyChoi 2008-02-21
看看是否有資源沒釋放
回复
amityliu 2008-02-21
请帮帮忙啊
回复
amityliu 2008-02-21
怎么一直没有人回复啊!希望有人能给与帮助!!谢谢!
回复
zdingyun 2008-02-21
To:amityliu
我的通信主窗体不用TIMER计时器,接收和发送数据通过全局变量传递.
回复
amityliu 2008-02-21
回复楼上zdingyun

但是我所有的串口通信部分和定时器都在一个窗体内啊
回复
zdingyun 2008-02-21
我有一个工控机代码,共加载7个窗体,总共使用了14个TIMER计时器。
遇到过你的问题。后来仅将串口通信部分全部放一个窗体,通过定时瞬间关闭该通信窗体,随后即刻加载该通信窗体。能连续运行几天,不出错。
回复
加载更多回复
相关推荐
发帖
VB基础类
创建于2007-09-28

7490

社区成员

VB 基础类
申请成为版主
帖子事件
创建了帖子
2008-02-20 11:26
社区公告
暂无公告