浏览代码

SYTLE: cache pointer to dataset

The getDataset() function appear to have some extra overhead, so
try caching and reusing the pointer.  Didn't do timing tests, but
the performance seems the same or better than before.
Steve Pieper 14 年之前
父节点
当前提交
0bd628fcff
共有 1 个文件被更改,包括 35 次插入32 次删除
  1. 35 32
      Libs/DICOM/Core/ctkDICOMIndexer.cpp

+ 35 - 32
Libs/DICOM/Core/ctkDICOMIndexer.cpp

@@ -101,6 +101,7 @@ void ctkDICOMIndexer::addDirectory(QSqlDatabase database, const QString& directo
   }
 
   DcmFileFormat fileformat;
+  DcmDataset *dataset;
 
   OFListIterator(OFString) iter = dcmtkFileNames.begin();
   OFListIterator(OFString) last = dcmtkFileNames.end();
@@ -142,6 +143,8 @@ void ctkDICOMIndexer::addDirectory(QSqlDatabase database, const QString& directo
     OFCondition status = fileformat.loadFile(filename.c_str());
     ++iter;
 
+    dataset = fileformat.getDataset();
+
     if (!status.good())
     {
       MITK_ERROR << "Could not load " << filename << "\nDCMTK says: " << status.text();
@@ -165,58 +168,58 @@ void ctkDICOMIndexer::addDirectory(QSqlDatabase database, const QString& directo
     int patientUID = -1;
 
     //If the following fields can not be evaluated, cancel evaluation of the DICOM file
-    if (!fileformat.getDataset()->findAndGetOFString(DCM_PatientsName, patientsName).good())
+    if (!dataset->findAndGetOFString(DCM_PatientsName, patientsName).good())
     {
       MITK_ERROR << "Could not read DCM_PatientsName from " << filename;
       continue;
     }
 
-    if (!fileformat.getDataset()->findAndGetOFString(DCM_StudyInstanceUID, studyInstanceUID).good())
+    if (!dataset->findAndGetOFString(DCM_StudyInstanceUID, studyInstanceUID).good())
     {
       MITK_ERROR << "Could not read DCM_StudyInstanceUID from " << filename;
       continue;
     }
 
-    if (!fileformat.getDataset()->findAndGetOFString(DCM_SeriesInstanceUID, seriesInstanceUID).good())
+    if (!dataset->findAndGetOFString(DCM_SeriesInstanceUID, seriesInstanceUID).good())
     {
       MITK_ERROR << "Could not read DCM_SeriesInstanceUID from " << filename;
       continue;
     }
-    if (!fileformat.getDataset()->findAndGetOFString(DCM_InstanceNumber, instanceNumber).good())
+    if (!dataset->findAndGetOFString(DCM_InstanceNumber, instanceNumber).good())
     {
       MITK_ERROR << "Could not read DCM_InstanceNumber from " << filename;
       continue;
     }
 
 
-    fileformat.getDataset()->findAndGetOFString(DCM_PatientID, patientID);
-    fileformat.getDataset()->findAndGetOFString(DCM_PatientsBirthDate, patientsBirthDate);
-    fileformat.getDataset()->findAndGetOFString(DCM_PatientsBirthTime, patientsBirthTime);
-    fileformat.getDataset()->findAndGetOFString(DCM_PatientsSex, patientsSex);
-    fileformat.getDataset()->findAndGetOFString(DCM_PatientsAge, patientsAge);
-    fileformat.getDataset()->findAndGetOFString(DCM_PatientComments, patientComments);
-    fileformat.getDataset()->findAndGetOFString(DCM_StudyID, studyID);
-    fileformat.getDataset()->findAndGetOFString(DCM_StudyDate, studyDate);
-    fileformat.getDataset()->findAndGetOFString(DCM_StudyTime, studyTime);
-    fileformat.getDataset()->findAndGetOFString(DCM_AccessionNumber, accessionNumber);
-    fileformat.getDataset()->findAndGetOFString(DCM_ModalitiesInStudy, modalitiesInStudy);
-    fileformat.getDataset()->findAndGetOFString(DCM_InstitutionName, institutionName);
-    fileformat.getDataset()->findAndGetOFString(DCM_PerformingPhysiciansName, performingPhysiciansName);
-    fileformat.getDataset()->findAndGetOFString(DCM_ReferringPhysiciansName, referringPhysician);
-    fileformat.getDataset()->findAndGetOFString(DCM_StudyDescription, studyDescription);
-
-    fileformat.getDataset()->findAndGetOFString(DCM_SeriesDate, seriesDate);
-    fileformat.getDataset()->findAndGetOFString(DCM_SeriesTime, seriesTime);
-    fileformat.getDataset()->findAndGetOFString(DCM_SeriesDescription, seriesDescription);
-    fileformat.getDataset()->findAndGetOFString(DCM_BodyPartExamined, bodyPartExamined);
-    fileformat.getDataset()->findAndGetOFString(DCM_FrameOfReferenceUID, frameOfReferenceUID);
-    fileformat.getDataset()->findAndGetOFString(DCM_ContrastBolusAgent, contrastAgent);
-    fileformat.getDataset()->findAndGetOFString(DCM_ScanningSequence, scanningSequence);
-
-    fileformat.getDataset()->findAndGetSint32(DCM_SeriesNumber, seriesNumber);
-    fileformat.getDataset()->findAndGetSint32(DCM_AcquisitionNumber, acquisitionNumber);
-    fileformat.getDataset()->findAndGetSint32(DCM_EchoNumbers, echoNumber);
-    fileformat.getDataset()->findAndGetSint32(DCM_TemporalPositionIdentifier, temporalPosition);
+    dataset->findAndGetOFString(DCM_PatientID, patientID);
+    dataset->findAndGetOFString(DCM_PatientsBirthDate, patientsBirthDate);
+    dataset->findAndGetOFString(DCM_PatientsBirthTime, patientsBirthTime);
+    dataset->findAndGetOFString(DCM_PatientsSex, patientsSex);
+    dataset->findAndGetOFString(DCM_PatientsAge, patientsAge);
+    dataset->findAndGetOFString(DCM_PatientComments, patientComments);
+    dataset->findAndGetOFString(DCM_StudyID, studyID);
+    dataset->findAndGetOFString(DCM_StudyDate, studyDate);
+    dataset->findAndGetOFString(DCM_StudyTime, studyTime);
+    dataset->findAndGetOFString(DCM_AccessionNumber, accessionNumber);
+    dataset->findAndGetOFString(DCM_ModalitiesInStudy, modalitiesInStudy);
+    dataset->findAndGetOFString(DCM_InstitutionName, institutionName);
+    dataset->findAndGetOFString(DCM_PerformingPhysiciansName, performingPhysiciansName);
+    dataset->findAndGetOFString(DCM_ReferringPhysiciansName, referringPhysician);
+    dataset->findAndGetOFString(DCM_StudyDescription, studyDescription);
+
+    dataset->findAndGetOFString(DCM_SeriesDate, seriesDate);
+    dataset->findAndGetOFString(DCM_SeriesTime, seriesTime);
+    dataset->findAndGetOFString(DCM_SeriesDescription, seriesDescription);
+    dataset->findAndGetOFString(DCM_BodyPartExamined, bodyPartExamined);
+    dataset->findAndGetOFString(DCM_FrameOfReferenceUID, frameOfReferenceUID);
+    dataset->findAndGetOFString(DCM_ContrastBolusAgent, contrastAgent);
+    dataset->findAndGetOFString(DCM_ScanningSequence, scanningSequence);
+
+    dataset->findAndGetSint32(DCM_SeriesNumber, seriesNumber);
+    dataset->findAndGetSint32(DCM_AcquisitionNumber, acquisitionNumber);
+    dataset->findAndGetSint32(DCM_EchoNumbers, echoNumber);
+    dataset->findAndGetSint32(DCM_TemporalPositionIdentifier, temporalPosition);
 
     MITK_INFO << "Adding new items to database:";
     MITK_INFO << "studyID: " << studyID;