Salome HOME
0021208: Performance issue when loading SMESH with an hdf file containing a big mesh
authoreap <eap@opencascade.com>
Wed, 14 Mar 2012 15:20:31 +0000 (15:20 +0000)
committereap <eap@opencascade.com>
Wed, 14 Mar 2012 15:20:31 +0000 (15:20 +0000)
  Fix reading nodes from a new HDF file (attempt #2)

src/SMESH_I/SMESH_PreMeshInfo.cxx

index 50652425c2a2ac58c961f2ec70bfc2b954f211ce..f3c8c27db5f796a477a5bd7735ebe86c211b3e94 100644 (file)
@@ -342,23 +342,24 @@ void SMESH_PreMeshInfo::hdf2meshInfo( const std::string& name,
     HDFdataset* dataset = new HDFdataset( name.c_str(), hdfGroup );
     dataset->OpenOnDisk();
 
-    // hdf_size datasetSize[ 1 ];
-    // HDFarray *array = new HDFarray(dataset);
-    // array->GetDim( datasetSize );
-    int size = dataset->GetSize();
+    // // hdf_size datasetSize[ 1 ];
+    // // HDFarray *array = new HDFarray(dataset);
+    // // array->GetDim( datasetSize );
+    // int size = dataset->GetSize();
 
-    int info[ SMDSEntity_Last * 2 ];
-    dataset->ReadFromDisk( info );
+    vector<int> info( SMDSEntity_Last * 2, 0 );
+    dataset->ReadFromDisk( &info[0] );
     dataset->CloseOnDisk();
 
     const Tmed2smeshElemTypeMap& med2smesh = med2smeshElemTypeMap();
     Tmed2smeshElemTypeMap::const_iterator me2sme, me2smeEnd = med2smesh.end();
-    for ( int i = 0; i < size /**datasetSize*/;  )
+    for ( size_t i = 0; i < info.size(); )
     {
       int medType = info[i++];
       int nbElems = info[i++];
+      if ( !nbElems ) break;
       me2sme = med2smesh.find( (MED::EGeometrieElement) medType );
-      if ( me2sme != me2smeEnd && nbElems )
+      if ( me2sme != me2smeEnd )
         setNb( me2sme->second, nbElems );
     }
   }