2010-07-02 4 views
2

[Nous utilisons ActiveRecord.]SubSonic suggestion d'amélioration "Enregistrer"

Pendant l'exécution Sql Server Profiler, nous avons remarqué qu'un simple "Enregistrer" a été précédée d'une bonne partie de l'activité de base de données. Nous avons constaté que le cœur de SubSonic parcourt toutes les propriétés et enregistre leurs valeurs dans un dictionnaire avant de réaliser l'enregistrement.

Nous étendons généralement nos objets de données dans des classes partielles qui incluent certaines propriétés nécessitant une activité de base de données. C'est là que l'activité supplémentaire se produit et, autant que nous le sachions, inutilement.

Nous avons modifié l'endroit où le script crée une propriété à partir de chaque colonne de base de données, de sorte qu'il décore maintenant ces propriétés avec [LocalData]. Nous avons ensuite modifié le noyau (Extensions.Objects.ToDictionary) pour ignorer GetValue si cet attribut est manquant.

Dans un test avec beaucoup d'activité de base de données de sauvegarde, nous avons vu le temps écoulé passer de 21 secondes à 2, et l'activité de la base de données a diminué d'environ deux tiers. Il y a deux questions dans tout cela: 1) y a-t-il eu une fonctionnalité qui aurait rendu notre changement inutile, et 2) si non, connaissez-vous d'autres processus liés à ToDictionary qui vont maintenant casser?

Merci!

+3

Propriétés nécessitant une activité de base de données - cela peut être mieux implémenté en tant que méthode (et une propriété en lecture seule ne nécessitant pas d'activité de base de données). Habituellement, il n'est pas considéré comme une bonne pratique d'avoir des propriétés «coûteuses». – marapet

Répondre

0

L'attribut [SubSonicIgnore] aurait-il obtenu la même chose?