用三层结构,在Client端起动一个自动任务(线程),调用SERVER,Server在运行完后虚拟内存未释放。(SQL SERVER + Win2000)怎样使Server的虚拟内存在程序运行完后释放掉虚拟内存?一个对象反复Create、Free后,虚拟内存也会一个劲地上涨,能解释一下原因吗?谢谢

解决方案 »

  1.   

    你说的是程序还在运行中吧?
    如果没有内存泄漏,这个增长不会无限制的,操作系统会管理。一个对象反复Create、Free后,虚拟内存也会一个劲地上涨,能解释一下原因吗?谢谢
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    这个可能是堆内存碎片造成的。
      

  2.   


    TO:pazee(耙子)(谁捡了我的钱包) 你说的是程序还在运行中吧?
    如果没有内存泄漏,这个增长不会无限制的,操作系统会管理。我是这样做的:
    1。SERVER做为服务器运行
    2。CLIENT调用SERVER的Method
    3。SERVER运行该Method
    4。Method运行完后,Free所有内存;SERVER仍作为服务器运行,虚拟内存未完全释放
    5。当CLIENT再调用SERVER的该Method时,虚拟内存会上涨直至用完所有虚拟内存应该没有内存泄露,我检查了所有创建的对象,均已释放;即使有泄露,在该Method中全为局部变量,该Method
    在运行完后,系统也应自运释放其虚拟内存
    一个对象反复Create、Free后,虚拟内存也会一个劲地上涨,能解释一下原因吗这个现象我是发现过,但我不知为什么。在一个函数中,创建一个AdoDataset,从数据库取数,再Free该对象,再创建,取数,FREE,如此反复,虚拟内存会一个劲地上涨。退使函数调用完毕后,虚拟内存也未释放。
    注:我用的是DCOM,所有这些在DCOM中运行,另外,我用的是DELPHI5.0 (不好意思)
      

  3.   

    应该没有内存泄露,我检查了所有创建的对象,均已释放;即使有泄露,在该Method中全为局部变量,该Method
    在运行完后,系统也应自运释放其虚拟内存
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    这肯定存在泄漏。我曾经写过类似的服务程序。刚开始12M,跑一天就到了40M,过几天就几百M,跟踪了大约半年才解决问题,现在的程序跑半年也不会超过50M。内存泄露的情况比较复杂,还要从程序的逻辑结构上重新审核内存的分配和释放。