Forum archiveIssue archiveOther usage issues

Archived discussion

StlMesh_Mesh destructor very slowly

Other usage issuesFri, 08/07/2015 - 18:474 replies

Browse this forum
QuestionAuthor

I figured out that the destructor of a StlMesh_Mesh is very slowly. It takes about one or two minutes till it is finished.

In this thread http://www.opencascade.org/org/forum/thread_24440/?forum=3 there is exactly the same problem with another class, but no solution was posted.

Is there a way to make the destructor faster? Why is it so slow at all?

Regards,
Author

Discussion

4 archived replies

Posts are displayed in their archived order.

01Commenter-1

Hallo Author,

I often encountered this issue in "Debug Mode" (Visual Studio). In "Release Mode" the destructor is *much* faster.

Viele Grüße aus Mülheim ;)

Commenter-1

02Author

Hi Thorsten

Nice surprise to meet you here ;-)

Thanks for your suggestion, but unfortunately switching from Debug mode to Release Mode brings no significant improvement. For an 18MB Mesh the destructor needs almost three minutes untill it is finshed.

Regards,
Author

03Commenter-1

I tested this Code in my app:

---snip---
OSD_Path fileName = "C:\\Temp\\mesh1.stl";
Handle(StlMesh_Mesh) mesh = RWStl::ReadFile(fileName);
Handle(MeshVS_Mesh) aisMesh = new MeshVS_Mesh();
Handle(XSDRAWSTLVRML_DataSource) datasource = new XSDRAWSTLVRML_DataSource(mesh);
aisMesh->SetDataSource(datasource);
aisMesh->GetDrawer()->SetBoolean(MeshVS_DA_SmoothShading, Standard_True);
aisMesh->SetDisplayMode(MeshVS_DMF_Shading);
ui.qOCViewer->getContext()->Display(aisMesh);

mesh.Nullify();
aisMesh.Nullify();
ui.qOCViewer->getContext()->Remove(aisMesh);
---snap---
Windows 10, OCCT 6.9.0 x64, Visual Studio 2013 Pro

With a 27 MB STL file (binary mode, ~570.000 Triangles) the "nullify"s take something less than one second. Application termination takes ~3 seconds (perhaps this is relevant for delayed destruction of "Handle" encapsuled pointers to mesh objects)

Try this in your environment. If you experience no problems: can you post sample code, which demonstrates your problem?

04Author

I simply do it that way:

Handle(StlMesh_Mesh) amesh = RWStl::ReadFile(filename, indicator);
amesh.Nullify();

I think the main difference is, that I´m still using OCCT 6.6.0. I will test it with OCCT 6.9. and hope that this will increase the Speed.