明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2206|回复: 8

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

[复制链接]
发表于 2005-1-21 14:07:00 | 显示全部楼层 |阅读模式
本人在编一个ARX+VC的齿轮加工仿真程序,加工过程也基本实现。


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


请教,如何解决之。


附:我是用“事务方式”处理操作的。
 楼主| 发表于 2005-1-21 20:39:00 | 显示全部楼层
up
 楼主| 发表于 2005-1-21 20:40:00 | 显示全部楼层
我顶
发表于 2005-1-24 13:16:00 | 显示全部楼层
估计你產生内存泄漏了


而且很大的泄露


你把你的代码贴上来


我们帮你看下
 楼主| 发表于 2005-1-25 19:38:00 | 显示全部楼层
请指教 for(int k=0;k<3;k++)
{
AcTransaction *pTrans
= actrTransactionManager->startTransaction();
AcDb3dSolid *pSolidWork = new AcDb3dSolid;
pSolidWork = pWork->GetObject(pTrans,AcDb::kForWrite);
AcDb3dSolid *pSolidTool = new AcDb3dSolid;
pSolidTool = pTool->GetObject(pTrans,AcDb::kForWrite);

AcDbRegion *pRegion = new AcDbRegion;
pRegion = pTool->GetRegion(pTrans,AcDb::kForWrite);
double t = -(76.0417*pi/180);//m_A=-1.5;//

for(int i=0;i<n;i++)
{

{
y_oc=x_0+(t*x_1)+(pow(t,2)*(x_2))+(pow(t,3)*(x_3))+(pow(t,4)*(x_4));
z_oc=y_0+(t*y_1)+(pow(t,2)*(y_2))+(pow(t,3)*(y_3))+(pow(t,4)*(y_4));
x_oc=z_0+(t*z_1)+(pow(t,2)*(z_2))+(pow(t,3)*(z_3))+(pow(t,4)*(z_4));
A=A_0+(t*A_1)+(pow(t,2)*(A_2))+(pow(t,3)*(A_3))+(pow(t,4)*(A_4));
B=B_0+(t*B_1)+(pow(t,2)*(B_2))+(pow(t,3)*(B_3))+(pow(t,4)*(B_4));
}

traceofTool(k,i,x_oc,y_oc,z_oc,A,B);
secB=pi/2-B;
secA=A;
OC.set(x_oc,y_oc,z_oc);
O2.set(m_O2*sin(B),m_O2*cos(B),0);
rotVA = O-O2;
MyMove(pTrans,pSolidTool,OCL,OC);
pRegion->transformBy(moved3D(OC[0]-OCL[0],OC[1]-OCL[1],OC[2]-OCL[2]));

MyRotate(pTrans,pSolidWork,secB-firB,rotVB,O);

MyRotate(pTrans,pSolidWork,secA-firA,rotVA,O); copyAndCut(pSolidWork,pRegion,OC,axisDir);//copy and cut.

pSolidWork->draw();

firB = secB;
firA = secA;
OCL=OC;
t+=m_stept;
}

MyRotate(pTrans,pSolidWork,-secA,rotVA,O); MyMove(pTrans,pSolidTool,OCL,O);
pRegion->transformBy(moved3D(O[0]-OCL[0],O[1]-OCL[1],O[2]-OCL[2]));
OCL.set(0,0,0);
firA = 0;
//
MyRotate(pTrans,pSolidWork,m_stepg,rotVA,O);
actrTransactionManager->endTransaction();
}
AcTransaction *pTrans
= actrTransactionManager->startTransaction();
AcDb3dSolid *pSolidWork = new AcDb3dSolid;
pSolidWork = pWork->GetObject(pTrans,AcDb::kForWrite);
MyRotate(pTrans,pSolidWork,-secB,rotVB,O);
actrTransactionManager->endTransaction();
发表于 2005-1-26 10:50:00 | 显示全部楼层
程序代码不全


就目前来看你的pSolidWork没有delete!
 楼主| 发表于 2005-1-28 11:07:00 | 显示全部楼层
用事务处理模式还用清空指针吗?


不是说,事务完成后,指针就自动无效了吗?
发表于 2005-1-28 14:44:00 | 显示全部楼层
去看小东对相同问题的回复,就最近的
发表于 2005-1-29 08:26:00 | 显示全部楼层
我的理解是一个原则,你加入模型空间让AutoCAD接管的内存才不需要自己清空,否则都需要!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-26 08:51 , Processed in 0.173559 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表