HustJames
2008-08-30, 20:31
问题如下:
我的VC程序已经可以调试Matlab生成的COM了,但由于算法要反复多次调用组件的 接口函数,当调用多次之后,函数的返回就不对了,也就是说 HRESULT hr 的值为 负数,开始的时候返回值都为0。
经过调试之后,发现可能是内存泄漏问题,原因如下:
(1)被调用的接口函数涉及到一个大的矩阵,约有2500×2500,当把这个值减小到 1000×1000时,发现可以正确执行的次数增加,由30次到100次以上;
(2)调用Matlab 生成的COM之后,发现存在2700多个内存泄漏(用Boundschecker 内存泄漏检测软件发现的,容量达1,116,982,876之多)。即使仅仅创建COM对 象之后,马上删除,都有15M左右的内存泄漏。用Boundschecker检查后发现,内存 泄漏所发生的地方几乎都是Matlab本身所带的动态库,比如awt.dll等(详见附件)
(3)调用Matlab 生成的COM之后,感觉机器的速度明显变慢;
我在Matlab中,用feature(“statistics”)检查内存的使用情况,并记录到文 件,并没有发现明显的内存减少情况。那么,到底是不是内存的问题呢?我不能确 定,如果是的话,那么用Matlab产生COM的时候,又如何控制呢?
错误的时候,hr 的返回值为0x8000,4005。::FormatMessage之后得到的错误信息 为:“Unsepecified error”.
有哪位大侠知道原因?谢谢执教!
我的VC程序已经可以调试Matlab生成的COM了,但由于算法要反复多次调用组件的 接口函数,当调用多次之后,函数的返回就不对了,也就是说 HRESULT hr 的值为 负数,开始的时候返回值都为0。
经过调试之后,发现可能是内存泄漏问题,原因如下:
(1)被调用的接口函数涉及到一个大的矩阵,约有2500×2500,当把这个值减小到 1000×1000时,发现可以正确执行的次数增加,由30次到100次以上;
(2)调用Matlab 生成的COM之后,发现存在2700多个内存泄漏(用Boundschecker 内存泄漏检测软件发现的,容量达1,116,982,876之多)。即使仅仅创建COM对 象之后,马上删除,都有15M左右的内存泄漏。用Boundschecker检查后发现,内存 泄漏所发生的地方几乎都是Matlab本身所带的动态库,比如awt.dll等(详见附件)
(3)调用Matlab 生成的COM之后,感觉机器的速度明显变慢;
我在Matlab中,用feature(“statistics”)检查内存的使用情况,并记录到文 件,并没有发现明显的内存减少情况。那么,到底是不是内存的问题呢?我不能确 定,如果是的话,那么用Matlab产生COM的时候,又如何控制呢?
错误的时候,hr 的返回值为0x8000,4005。::FormatMessage之后得到的错误信息 为:“Unsepecified error”.
有哪位大侠知道原因?谢谢执教!