用.net 写了一个调用组件的服务. 这个服务调用DLL的函数来实现一定的功能.具体是每个小时调用一次d l l .
现在有一个问题.组件调用DLL,DLL中函数的一些开销占用一定的资源,可能还有内存泄漏.而且服务不能停,DLL中的资源不能释放. 时间长了就把内存占慢了.
请问各位大虾:如何能够使得服务不停,在调用完DLL函数后将DLL所占用的开销全部释放调.当服务下一个小时调用DLL时重新分配资源呢?

解决方案 »

  1.   

    现在我的想法是: 是否有什么函数可以让DLL中的组件完成任务后释放资源?就像普通应用程序一样,虽然运行时开销很大,但是一退出就释放了所有占用的资源.
      

  2.   

    各位兄台,我就是解决不了内存泄漏的问题啊。迫不得已才想走歪门邪道的啊!!!
    难道就没有办法把DLL的资源释放嘛?
      

  3.   

    难道真的没有办法了嘛?
    为什么普通的应用程序使用退出后资源可以被释放呢?而DLL被服务调用后就释放不了内存。
    难道非要停掉服务嘛?
      

  4.   

    内存在堆中无法释放,即使DLL退出,那块泄漏的内存也是不能通过释放DLL来清除的,而泄漏的那块内存不能被使用了。所以解决问题的根本办法就是解决内存泄漏。你可以检查一些 new 等分配内存的函数是不是都跟着相应的 delete等释放。
    或者用内存检查工具,如boundCheck来检查哪些地方内存没有释放。
    看看什么地方有不正常的 return break 什么地方goto后没有释放
      

  5.   

    哦?DLL中是独立的模块怎么内存不能释放呢?
      

  6.   

    你的问题描述不是很清楚(什么服务,组件,dll到底是什么关系?怎么调用的?顺序是什么?那些部分是你可以修改的?怎么在CSDN上问问题的程序员的表达能力都....).
    实在没有办法解决问题的时候,看看能否将你的DLL包装成一个进程外的COM组件,每次调用都启动该进程外组件,调用外结束该进程,那不管是否有泄漏都可以将就对付,只是效率可能比较低.