| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 892 人关注过本帖
标题:vb编写的上位机,每次运行一天左右后报错
只看楼主 加入收藏
czz原来如此
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2013-8-8
结帖率:25%
收藏
已结贴  问题点数:10 回复次数:16 
vb编写的上位机,每次运行一天左右后报错
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 左右 
2014-03-13 14:46
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:5 
要么程序里有内存泄漏,长时间运行出现错误。
要么你的机子的内存存在不稳定。
如果每次报错的 内存地址都是这二个,那就内存或系统出问题的可能性更大,
如果每次报错的内存地址都是随机的,那就存在内存泄漏的可能性就更大一些。

1、写程序时,在没有 on error resume next 的情况下,所有的出错问题都得到解决,确保程序的健壮性。
2、程序最后打包时,每个函数、过程 再加上  on error resume next 这句进行编译。
3、所以涉及到分配内存的地方(redim ,split 函数,strconv 函数 等),创建对象 等,使用完后,是否显式销毁释放内存了??
4、动态控件,如 winsock, 端口控件,是否对不再使用的对象重新使用的情况?定时扫描控件状态,出现问题时关闭,并重新使用。

从这几个方面去检查程序吧,一般健壮的程序,一般不出现一天就出问题的。

--------------------------
有句话,很久很久以前,都不记得是从哪里看到的:
我写个程序只要三天,IBM要三个月;我的程序能用三个月,IBM的能管三年。

授人于鱼,不如授人于渔
早已停用QQ了
2014-03-13 19:52
czz原来如此
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2013-8-8
收藏
得分:0 
多谢指点!
还有以下问题:
1、redim使用完后怎么释放?
2、怎么算是“对不再使用的对象重新使用的情况?”怎么定时去扫描控件状态?
2014-03-17 09:59
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
redim 定义的数组,如果下次还要继续使用,那么重新定义一下这个数组元素只有一个,就会释放所占的内存。

对不再使用的对象重新使用的情况
是指连接用的控件等,如 winsock 控件。
当你需要保存多个连接,并且需要动态生成连接的情况下,
使用一个定时器,time1
假设 winsock 控件组的 名字为 wsk1
for i=1 to wsk1.count              '0号为侦听,不需要判断
    if wsk1(i).start = 9 or wsk1(i).start = 8 then      '如果为错误\远程关闭
            wsk(i).close           '则关闭
    end if
next i
浏览器写的代码,可能有单词错误,自己更正一下。

-------------------
在需要连接时
for i=1 to wsk1.count
   if wsk1(i).strart=0 then          '关闭状态
        exit for
   end if
next i
if i>wsk1.count then            '如果没找到
    load wsk1(i)                '载入新的
end if
使用  wsk1(i)  进行联接

=================

这样一个小程序,长时间超过 3天+ ,还没出现问题来。
也与那个程序很小有关吧。但看内存没有出现自动增长的情况。

授人于鱼,不如授人于渔
早已停用QQ了
2014-03-17 10:10
czz原来如此
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2013-8-8
收藏
得分:0 
我在网上看了erase可以清空数组,但是我的代码只有在查询中才用到redim函数。上位机正常运行时没有使用查询操作,但是也会报那个错误。
Public Sub Find_date(ByVal Top As String, ByVal Down As String, ByVal i As Byte, ty As String, name As String)

    Dim con As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim strSQL As String, j As Integer, Z As Integer
   
    DbPath = App.Path & "\T_data.mdb"
    Constr = "provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & DbPath
    con.Open Constr


    sql = "SELECT COUNT(ID) as Z FROM Channels_1 WHERE ID between '" & Top & "' and '" & Down & "' and number='" & ty & " '  and Prj_name ='" & name & "'"
   
    rs.Open sql, con, 3, 3
   
    XXX = rs(Z)
    con.Close
   
    ReDim History(XXX)
    ReDim Date_time(XXX)
    con.Open
   
    strSQL = " SELECT * FROM Channels_1 WHERE ID between '" & Top & "' and '" & Down & "'"
    rs.CursorLocation = adUseClient
    rs.Open strSQL, con, adOpenStatic, adLockBatchOptimistic
   
    For Z = 1 To XXX
        History(Z) = rs.Fields(Val(i)).Value
        Date_time(Z) = rs.Fields(1).Value
        rs.MoveNext
    Next Z
    con.Close
   
End Sub
2014-03-17 10:53
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
ReDim History(XXX)
    ReDim Date_time(XXX)

这个在查询时,随时都需要变化, 释放不释放内存都问题不会是很大。VB6 在重定义数组时,它是会内存回收的。

1、使用编译环境运行一天试试。
2、把整个程序拆出几个程序,然后程序之间使用消息或网络通迅或数据库连接起来。然后判断哪个部分出问题,每运行多长时间自动重启该部分。(难度很大)。

===========
0X000006CF ,这个地址小于 0x00400000 这个EXE 加载地址。
猜测情况:
这个需要读取的地址小于 基地址,按我的理解来说,基地址之前的地址属于系统保护内存,应用程序不能使用到。
而你这里报错的地址却在基地址之前,那么要么内存出现问题,要么系统有问题。

授人于鱼,不如授人于渔
早已停用QQ了
2014-03-17 20:03
czz原来如此
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2013-8-8
收藏
得分:0 
我把redim的数组每次使用后都用erase函数释放,但是问题依然没解决。而且每次报错的地址都不一样

图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
2014-03-19 09:22
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:652
专家分:3402
注 册:2008-5-7
收藏
得分:5 
数组不需要释放,你查下有没有api调用,一般这种情况是api调用参数传递出现的。
2014-03-19 10:08
czz原来如此
Rank: 1
等 级:新手上路
帖 子:22
专家分:0
注 册:2013-8-8
收藏
得分:0 
回复 8楼 lowxiong
没有调用API
2014-03-21 14:01
水到渠成VB
Rank: 1
来 自:黑龙江
等 级:新手上路
帖 子:21
专家分:5
注 册:2013-9-24
收藏
得分:0 
你给的信息不是很全,会不会这样硬件接口这个地方,程序一直被占用。
你用的上位机跟下位机是怎么通讯的?
2014-03-21 17:39
快速回复:vb编写的上位机,每次运行一天左右后报错
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017668 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved