SldWorks swApp = Utility.ConnectToSolidWorks();
if (swApp == null) return;
ModelDoc2 swModelDoc = (ModelDoc2)swApp.ActiveDoc;
if (swModelDoc == null) return;
try
{
// 获取接口
ModelView activeView = swModelDoc.IActiveView;
FeatureManager featMgr = swModelDoc.FeatureManager;
SketchManager sketchMgr = swModelDoc.SketchManager;
// 保存原始设置
bool originalGraphicsUpdate = activeView.EnableGraphicsUpdate;
bool originalFeatureTree = featMgr.EnableFeatureTree;
bool originalFeatureTreeWindow = featMgr.EnableFeatureTreeWindow;
bool originalAutoSolve = sketchMgr.AutoSolve;
bool originalAddToDB = sketchMgr.AddToDB;
bool originalDisplayWhenAdded = sketchMgr.DisplayWhenAdded;
// 优化性能设置
swApp.SetUserPreferenceToggle((int)swUserPreferenceToggle_e.swAutomaticDrawingViewUpdate, false);
activeView.EnableGraphicsUpdate = false;
featMgr.EnableFeatureTree = false;
featMgr.EnableFeatureTreeWindow = false;
sketchMgr.AutoSolve = false;
sketchMgr.AddToDB = true;
sketchMgr.DisplayWhenAdded = false;
const int BATCH_SIZE = 25; // 减小批量大小,增加稳定性
const int TOTAL_ITERATIONS = 1000;
int i = 0;
while (i < TOTAL_ITERATIONS)
{
// 创建新的3D草图
sketchMgr.Insert3DSketch(false);
if (sketchMgr.ActiveSketch == null)
{
MessageBox.Show(\$"第 {i} 次创建3D草图失败");
break;
}
// 计算坐标
double number1 = i / 100.0;
double j = (i + 500) / 100.0;
// 创建单条线段
SketchSegment s = sketchMgr.CreateLine(number1, number1, number1, j, j, j);
if (s == null)
{
MessageBox.Show(\$"第 {i} 次创建线段失败");
sketchMgr.Insert3DSketch(false);
break;
}
// 关闭当前草图
sketchMgr.Insert3DSketch(false);
i++;
// 更频繁地重建并释放资源
if (i % BATCH_SIZE == 0 || i == TOTAL_ITERATIONS)
{
swModelDoc.EditRebuild3();
Marshal.ReleaseComObject(s); // 释放线段对象
System.GC.Collect(); // 强制垃圾回收,减少内存占用
}
}
// 恢复设置并最后重建
sketchMgr.AddToDB = originalAddToDB;
sketchMgr.DisplayWhenAdded = originalDisplayWhenAdded;
sketchMgr.AutoSolve = originalAutoSolve;
activeView.EnableGraphicsUpdate = originalGraphicsUpdate;
featMgr.EnableFeatureTree = originalFeatureTree;
featMgr.EnableFeatureTreeWindow = originalFeatureTreeWindow;
swApp.SetUserPreferenceToggle((int)swUserPreferenceToggle_e.swAutomaticDrawingViewUpdate, true);
swModelDoc.EditRebuild3();
}
catch (Exception ex)
{
MessageBox.Show(\$"发生错误: {ex.Message}");
}
finally
{
// 确保恢复设置并清理
if (swModelDoc != null)
{
ModelView activeView = swModelDoc.IActiveView;
FeatureManager featMgr = swModelDoc.FeatureManager;
SketchManager sketchMgr = swModelDoc.SketchManager;
activeView.EnableGraphicsUpdate = true;
featMgr.EnableFeatureTree = true;
featMgr.EnableFeatureTreeWindow = true;
sketchMgr.AutoSolve = true;
sketchMgr.AddToDB = false;
sketchMgr.DisplayWhenAdded = true;
swApp.SetUserPreferenceToggle((int)swUserPreferenceToggle_e.swAutomaticDrawingViewUpdate, true);
// 释放COM对象
Marshal.ReleaseComObject(sketchMgr);
Marshal.ReleaseComObject(featMgr);
Marshal.ReleaseComObject(activeView);
Marshal.ReleaseComObject(swModelDoc);
Marshal.ReleaseComObject(swApp);
System.GC.Collect();
System.GC.WaitForPendingFinalizers();
}
}