你看没有看demo \Midas\SharedConn的那个demo?
我是在那个上面改进了一下,没有发现什么问题。觉得还是不错的。
我觉得你不需要手动Free子RDM,COM机制自己有计数器啊,它会自动释放的。
不知道对你有用没有。
还有,我在子RDMBase的Create事件里这样处理了一下:
for ... do
if Components[i] is TCustomADODataSet then
begin
TCustomADODataSet(Components[i]).CursorType := ctOpenForwardOnly;
TCustomADODataSet(Components[i]).MarshalOptions := moMarshalModifiedOnly;
if TCustomADODataSet(Components[i]).CacheSize = 1 then
TCustomADODataSet(Components[i]).CacheSize := 100;
end;
可以大大减小资源开销。
你先看看,咱们共同学习。
表现为:内存回收低位点不断升高(以每次内存回收的最低点连成一条直线,那么它是一条上升线);内存回收的频率也越来越高,内存占用也越来越高,最终出现"Out of Memory Exception"的系统异常。
解决办法:定位那些有内存泄漏的类或对象并修改完善这些类以避免内存泄漏。方法是:经过一段时间的测试、监控,如果某个类的对象数目屡创新高,即使在JVM Full GC后仍然数目降不下来,这些对象基本上是属于内存泄漏的对象了。