Sfoglia il codice sorgente

Put tag caching in an sqlite transaction for efficiency

Since we may have a long list of tags to cache, put them all in
one transaction to minimize sqlite overhead.
Steve Pieper 12 anni fa
parent
commit
debe8b5bfe
1 ha cambiato i file con 7 aggiunte e 0 eliminazioni
  1. 7 0
      Libs/DICOM/Core/ctkDICOMDatabase.cpp

+ 7 - 0
Libs/DICOM/Core/ctkDICOMDatabase.cpp

@@ -1060,6 +1060,10 @@ void ctkDICOMDatabasePrivate::precacheTags( const QString sopInstanceUID )
   QString fileName = q->fileForInstance(sopInstanceUID);
   dataset.InitializeFromFile(fileName);
 
+  QSqlQuery transaction( this->TagCacheDatabase );
+  transaction.prepare( "BEGIN TRANSACTION" );
+  this->loggedExec(transaction);
+
   foreach (const QString &tag, this->TagsToPrecache)
     {
     unsigned short group, element;
@@ -1068,6 +1072,9 @@ void ctkDICOMDatabasePrivate::precacheTags( const QString sopInstanceUID )
     QString value = dataset.GetAllElementValuesAsString(tagKey);
     q->cacheTag(sopInstanceUID, tag, value);
     }
+
+  transaction.prepare( "END TRANSACTION" );
+  this->loggedExec(transaction);
 }
 
 //------------------------------------------------------------------------------