diff OrthancServer/Sources/ServerJobs/ResourceModificationJob.cpp @ 4508:8f9090b137f1

Optimization in C-STORE SCP by avoiding an unnecessary DICOM parsing
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 11 Feb 2021 11:00:05 +0100
parents d9473bd5ed43
children 45bce660ce3a
line wrap: on
line diff
--- a/OrthancServer/Sources/ServerJobs/ResourceModificationJob.cpp	Thu Feb 11 09:33:48 2021 +0100
+++ b/OrthancServer/Sources/ServerJobs/ResourceModificationJob.cpp	Thu Feb 11 11:00:05 2021 +0100
@@ -210,9 +210,8 @@
 
     assert(modifiedUid == IDicomTranscoder::GetSopInstanceUid(modified->GetDcmtkObject()));
 
-    DicomInstanceToStore toStore;
-    toStore.SetOrigin(origin_);
-    toStore.SetParsedDicomFile(*modified);
+    std::unique_ptr<DicomInstanceToStore> toStore(DicomInstanceToStore::CreateFromParsedDicomFile(*modified));
+    toStore->SetOrigin(origin_);
 
 
     /**
@@ -228,21 +227,21 @@
 
     if (originalHasher->HashSeries() != modifiedHasher.HashSeries())
     {
-      toStore.AddMetadata(ResourceType_Series, metadataType, originalHasher->HashSeries());
+      toStore->AddMetadata(ResourceType_Series, metadataType, originalHasher->HashSeries());
     }
 
     if (originalHasher->HashStudy() != modifiedHasher.HashStudy())
     {
-      toStore.AddMetadata(ResourceType_Study, metadataType, originalHasher->HashStudy());
+      toStore->AddMetadata(ResourceType_Study, metadataType, originalHasher->HashStudy());
     }
 
     if (originalHasher->HashPatient() != modifiedHasher.HashPatient())
     {
-      toStore.AddMetadata(ResourceType_Patient, metadataType, originalHasher->HashPatient());
+      toStore->AddMetadata(ResourceType_Patient, metadataType, originalHasher->HashPatient());
     }
 
     assert(instance == originalHasher->HashInstance());
-    toStore.AddMetadata(ResourceType_Instance, metadataType, instance);
+    toStore->AddMetadata(ResourceType_Instance, metadataType, instance);
 
 
     /**
@@ -250,7 +249,7 @@
      **/
 
     std::string modifiedInstance;
-    if (GetContext().Store(modifiedInstance, toStore,
+    if (GetContext().Store(modifiedInstance, *toStore,
                            StoreInstanceMode_Default) != StoreStatus_Success)
     {
       throw OrthancException(ErrorCode_CannotStoreInstance,