[求助]:高手,解决cad仿真中虚拟内存不够和动作越来越慢问题?
本人在编一个ARX+VC的齿轮加工仿真程序,加工过程也基本实现。只是,CAD在动作过程中,从第一个齿到最后一个齿,动作越来越慢,直至系统报出“虚拟内存不够”警告。然后,CAD便停止响应。
请教,如何解决之。
附:我是用“事务方式”处理操作的。 up 我顶 估计你產生内存泄漏了
而且很大的泄露
你把你的代码贴上来
我们帮你看下 请指教
for(int k=0;k<3;k++)<BR> {<BR> AcTransaction *pTrans<BR> = actrTransactionManager->startTransaction();<BR> AcDb3dSolid *pSolidWork = new AcDb3dSolid;<BR> pSolidWork = pWork->GetObject(pTrans,AcDb::kForWrite);<BR> AcDb3dSolid *pSolidTool = new AcDb3dSolid;<BR> pSolidTool = pTool->GetObject(pTrans,AcDb::kForWrite);<BR> <BR> AcDbRegion *pRegion = new AcDbRegion; <BR> pRegion = pTool->GetRegion(pTrans,AcDb::kForWrite);<BR> double t = -(76.0417*pi/180);//m_A=-1.5;//<BR> <BR> for(int i=0;i<n;i++)<BR> {<BR> <BR> { <BR> y_oc=x_0+(t*x_1)+(pow(t,2)*(x_2))+(pow(t,3)*(x_3))+(pow(t,4)*(x_4));<BR> z_oc=y_0+(t*y_1)+(pow(t,2)*(y_2))+(pow(t,3)*(y_3))+(pow(t,4)*(y_4));<BR> x_oc=z_0+(t*z_1)+(pow(t,2)*(z_2))+(pow(t,3)*(z_3))+(pow(t,4)*(z_4));<BR> A=A_0+(t*A_1)+(pow(t,2)*(A_2))+(pow(t,3)*(A_3))+(pow(t,4)*(A_4));<BR> B=B_0+(t*B_1)+(pow(t,2)*(B_2))+(pow(t,3)*(B_3))+(pow(t,4)*(B_4));<BR> }<BR> <BR> traceofTool(k,i,x_oc,y_oc,z_oc,A,B);<BR> secB=pi/2-B;<BR> secA=A;<BR> OC.set(x_oc,y_oc,z_oc);<BR> O2.set(m_O2*sin(B),m_O2*cos(B),0);<BR> rotVA = O-O2;<BR> MyMove(pTrans,pSolidTool,OCL,OC);<BR> pRegion->transformBy(moved3D(OC-OCL,OC-OCL,OC-OCL));<BR> <BR> MyRotate(pTrans,pSolidWork,secB-firB,rotVB,O);<BR> <BR> MyRotate(pTrans,pSolidWork,secA-firA,rotVA,O);
copyAndCut(pSolidWork,pRegion,OC,axisDir);//copy and cut.<BR> <BR> pSolidWork->draw();<BR> <BR> firB = secB;<BR> firA = secA;<BR> OCL=OC;<BR> t+=m_stept; <BR> }<BR> <BR> MyRotate(pTrans,pSolidWork,-secA,rotVA,O);
MyMove(pTrans,pSolidTool,OCL,O);<BR> pRegion->transformBy(moved3D(O-OCL,O-OCL,O-OCL));<BR> OCL.set(0,0,0);<BR> firA = 0;<BR> //<BR> MyRotate(pTrans,pSolidWork,m_stepg,rotVA,O);<BR> actrTransactionManager->endTransaction();<BR> }<BR> AcTransaction *pTrans<BR> = actrTransactionManager->startTransaction();<BR> AcDb3dSolid *pSolidWork = new AcDb3dSolid;<BR> pSolidWork = pWork->GetObject(pTrans,AcDb::kForWrite);<BR> MyRotate(pTrans,pSolidWork,-secB,rotVB,O);<BR> actrTransactionManager->endTransaction(); 程序代码不全
就目前来看你的pSolidWork没有delete! 用事务处理模式还用清空指针吗?
不是说,事务完成后,指针就自动无效了吗? 去看小东对相同问题的回复,就最近的 我的理解是一个原则,你加入模型空间让AutoCAD接管的内存才不需要自己清空,否则都需要!
页:
[1]