Еще оптимизационное
Сейчас заметил, что LeechCraft запускается секунд 7-9 на моем Core2Duo, что с оптимизациями (-O2), что без. Начал выяснять. Оказалось, работа с QSettings в XMLSettingsManager ведется, мягко говоря, не очень оптимально: они пересоздаются при каждом изменении свойства. В итоге, простенький diff, и время старта уменьшено на порядок: 0.9 секунды.
% svn diff plugininterface/basesettingsmanager.h -r 574:575 Index: plugininterface/basesettingsmanager.h =================================================================== --- plugininterface/basesettingsmanager.h (revision 574) +++ plugininterface/basesettingsmanager.h (revision 575) @@ -20,6 +20,7 @@ QMap<QByteArray, QPair<QObject*, QByteArray> > Properties2Object_; bool Initializing_; + QSettings *Settings_; public: /*! @brief Initalizes the settings manager. * @@ -30,15 +31,12 @@ */ void Init () { - QSettings *settings = BeginSettings (); - QStringList properties = settings->childKeys (); + Settings_ = BeginSettings (); + QStringList properties = Settings_->childKeys (); Initializing_ = true; for (int i = 0; i < properties.size (); ++i) - setProperty (PROP2CHAR (properties.at (i)), settings->value (properties.at (i), QVariant ())); + setProperty (PROP2CHAR (properties.at (i)), Settings_->value (properties.at (i), QVariant ())); Initializing_ = false; - EndSettings (settings); - delete settings; - settings = 0; } /*! @brief Prepares the settings manager for deletion. @@ -51,10 +49,11 @@ void Release () { QList<QByteArray> dProperties = dynamicPropertyNames (); - QSettings *settings = BeginSettings (); for (int i = 0; i < dProperties.size (); ++i) - settings->setValue (dProperties.at (i), property (dProperties.at (i).constData ())); - EndSettings (settings); + Settings_->setValue (dProperties.at (i), property (dProperties.at (i).constData ())); + EndSettings (Settings_); + delete Settings_; + Settings_ = 0; } /*! @brief Subscribes object to property changes. @@ -107,11 +106,7 @@ QDynamicPropertyChangeEvent *event = dynamic_cast<QDynamicPropertyChangeEvent*> (e); QByteArray name = event->propertyName (); - QSettings *settings = BeginSettings (); - settings->setValue (name, property (name)); - EndSettings (settings); - delete settings; - settings = 0; + Settings_->setValue (name, property (name)); if (Properties2Object_.contains (name)) {
Базы данных два метра занимают, из них полтора — Aggregator'овские фиды.