用DELPHI和COM+开发,COM+有四个组件,客户端用DCOMCONNECTION连接到COM+,COM+已配置为POOL OBJECT,且已设为MULTI THREAD。
在处理中,发现COM+占用的内存直线上升,处理了十个单据,居然已到900M内存!最终出现“内存不足”错误,此时看任务管理器,发现DLLHOST大概占用120M内存。
如果把该DLLHOST强制结束,或者是客户端退出,COM+的内存可以正常释放,查看系统已用内存,是200M,应该比较正常。
请有经验的朋友帮我,不胜感激!
路过的朋友,请帮我顶一下,感激!

解决方案 »

  1.   

    估计你在财务类软件吧。处理了十个单据,居然已到900M内存!
    连接、使用数据库后应尽量快速释放掉。
    另外,你是否每一次查询、提交均使用不同的THREAD。
    还有,如果数据库中的数据量非常大,而你的COM+不加过滤就读取过来,估计内存也会吃紧。
      

  2.   

    我是这样的:
    服务器端:
    静态的控件只有一个全局的ADOCONNECTION,当COM+的DATAMODULE在ACTIVE时,ADOCONNECTION设为OPEN,DATAMODULE在DEACTIVE时,ADOCONNECTION设定为CLOSE。而每次用的QUERY是动态创建的,QUERY用完后,用try...finally将之立即FREE的。COM+与客户端都是用CLIENTDATASET的数据集DATA以OLEVARIANT传递。客户端:
    用四个DCOMCONNECTION放在数据模块中,分别连接到COM+不同的组件中,
      

  3.   

    Query 用完之后FREE之前,一定要CLOSE。。如果你所有原因都分析了,还是没有改善,
    试试去微软网站找ADO的补丁。。