最近我连续开发了几个系统,在退出系统的时候都出现了不能完全退出的情况。具体情形是:点击“退出”菜单项后,系统表面上看是退出了,此时如果用任务管理器查看,却发现系统依然驻留于内存之中。而且系统若连续进入-退出N次,则用任务管理器查看内存中就驻留有N个此系统。最初我考虑是不是退出时什么对象没有卸载完,在VB中对源程序进行调试却又发现这个问题并非每次退出系统都出现,其出现好像是随机的,很难找到原因。编译执行后该问题的发生频率明显增加,几乎每次退出都有此问题。我不可能叫用户每次退出系统后都打开任务管理器去卸载驻留在内存中的程序吧。这究竟是什么原因呢,如何改正?请各位高手赐教!谢谢,分不够可再加!!!

解决方案 »

  1.   

    就是有对象没有卸载完还有,在你的程序“退出”时,代码一定要加上end
    如果有对象打开,则 set obj=nothing
     '再结束程序
     end
      

  2.   

    呵呵,我想你关闭时写的一定是hide.
      

  3.   

    这是程序没有正常退出,如果我没猜错,你用的是HIDE命令吧.
    这种方法只能是将当前窗口隐蔽而不能卸载,在程序的结束时应用end来结束程序
      

  4.   

    资源没有释放
    退出前将所有的对象释放掉(set obj=nothing)
    特别是涉及到excel的打开更应如此
      

  5.   

    1﹐如果是多窗體﹐請檢查是否每一個都已經unload掉﹐你可以寫個循環讓每個     窗體都unload.
          2﹐如果用到數據庫連接﹐請關閉的時候用set conn=nothing進行完全關閉。
          3﹐用到某控件﹐特別是外部控件﹐要看到底是怎么關。如果是于硬件連接的部分﹐沒有關的話﹐會沖突很麻煩。
     其實必須要明白﹐窗體關閉的時候一定會經過unload,最后經過Terminate事件。如果你把unload的Cancel設置false﹐請一定在關閉的時候設置回true。否則它永遠都沒有關閉。
      最后是個人遇見的一次﹐因為習慣在unload下全部關閉﹐用end﹐但是事實會出現非法操作﹐所有真正end掉程序應該寫在Terminate事件中。這話貼第3次了﹐因為我真的懶得寫了。
      

  6.   

    资源没有释放
    set obj=nothing
      

  7.   

    用unload不可能还关不掉呀,但是看你的级别应该不会把关闭程序写成hide呀?怎么的呢?仔细检查一下吧,顺便帮你顶。
      

  8.   

    我也遇到过的,可能是调用了数据库,用set  object=nothing就可以了。
      

  9.   

    你打开windows任务管理器,点击进程选项卡,观察有那些对象还驻留在内存中,然后在程序中就可以用set object=nothing,退出前关闭对象就行
      

  10.   


        我几个系统用End就OK了!
      

  11.   

    对,一定要加end!!!以前我作过一个mp3播放器,带歌词秀的那种,和你一样,关闭的时候系统的状态栏的小图标是没了,但是进程里面还是有,重新打开的时候还提示"程序已经在运行"!~ 一个end搞定
      

  12.   

    如果你在这个窗体引用了别的窗体的变量 ,unoad me 是不能完全卸载的,
    所以用end 比较好,
    还有 用 App.PrevInstance 来判断 程序是不是已运行了
      

  13.   

    也许是打开了的窗体用了Hide,你检查一下,用unload 就可以了。
    再有在程序之前要检查是不是打开了对象,用set obj=nothing把源释放。
    在主窗体结束前加上End。