wadezhang 发表于 2005-1-21 14:07:00

[求助]:高手,解决cad仿真中虚拟内存不够和动作越来越慢问题?

本人在编一个ARX+VC的齿轮加工仿真程序,加工过程也基本实现。


只是,CAD在动作过程中,从第一个齿到最后一个齿,动作越来越慢,直至系统报出“虚拟内存不够”警告。然后,CAD便停止响应。


请教,如何解决之。


附:我是用“事务方式”处理操作的。

wadezhang 发表于 2005-1-21 20:39:00

up

wadezhang 发表于 2005-1-21 20:40:00

我顶

easypower 发表于 2005-1-24 13:16:00

估计你產生内存泄漏了


而且很大的泄露


你把你的代码贴上来


我们帮你看下

wadezhang 发表于 2005-1-25 19:38:00

请指教


        for(int k=0;k&lt;3;k++)<BR>        {<BR>                AcTransaction *pTrans<BR>                        = actrTransactionManager-&gt;startTransaction();<BR>                AcDb3dSolid *pSolidWork = new AcDb3dSolid;<BR>                pSolidWork        = pWork-&gt;GetObject(pTrans,AcDb::kForWrite);<BR>                AcDb3dSolid *pSolidTool = new AcDb3dSolid;<BR>                pSolidTool = pTool-&gt;GetObject(pTrans,AcDb::kForWrite);<BR>                <BR>                AcDbRegion *pRegion = new AcDbRegion; <BR>                pRegion = pTool-&gt;GetRegion(pTrans,AcDb::kForWrite);<BR>                double t = -(76.0417*pi/180);//m_A=-1.5;//<BR>                <BR>                for(int i=0;i&lt;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-&gt;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-&gt;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-&gt;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-&gt;endTransaction();<BR>        }<BR>        AcTransaction *pTrans<BR>                        = actrTransactionManager-&gt;startTransaction();<BR>                AcDb3dSolid *pSolidWork = new AcDb3dSolid;<BR>                pSolidWork = pWork-&gt;GetObject(pTrans,AcDb::kForWrite);<BR>        MyRotate(pTrans,pSolidWork,-secB,rotVB,O);<BR>        actrTransactionManager-&gt;endTransaction();

easypower 发表于 2005-1-26 10:50:00

程序代码不全


就目前来看你的pSolidWork没有delete!

wadezhang 发表于 2005-1-28 11:07:00

用事务处理模式还用清空指针吗?


不是说,事务完成后,指针就自动无效了吗?

panfanggui 发表于 2005-1-28 14:44:00

去看小东对相同问题的回复,就最近的

easypower 发表于 2005-1-29 08:26:00

我的理解是一个原则,你加入模型空间让AutoCAD接管的内存才不需要自己清空,否则都需要!
页: [1]
查看完整版本: [求助]:高手,解决cad仿真中虚拟内存不够和动作越来越慢问题?