Je travaille actuellement sur une application qui utilise Entity Framework 4.1 (code d'abord) et SQL Server CE 4.0. Une des nouvelles choses que j'aime vraiment de SQL Server CE 4.0 sont les valeurs calculées.Entity Framework 4.1 DatabaseGeneratedOption.Identity Performance
Mais j'ai un problème de performances lors de l'importation d'anciennes données dans mon nouveau système de stockage de données (environ 50000 entrées). C'est ma deuxième implémentation pour cela. La première version utilisait Entity Framework 4.0 et SQL Server CE 3.5. Mais il existe une énorme différence de performance entre ces implémentations. La première implémentation du code prend environ une heure pour importer les entrées, l'autre implémentation quelques minutes seulement.
La plupart du temps est passé dans la méthode SaveChanges
. J'ai suivi le problème jusqu'à l'attribut [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
. Si j'utilise [DatabaseGenerated(DatabaseGeneratedOption.None)]
et implémente ma propre génération de clés (en guise de solution de contournement simple), les performances sont de retour au niveau de la première implémentation.
Est-ce un problème connu? Y a-t-il un moyen de résoudre ce problème de performance? Ou est en train de générer mes propres clés le chemin à parcourir? Gardez un ObjectContext/connexion ouvert pour la durée de vie de votre application.
Voici deux questions/réponses sur les encarts volumineux dans EF 4.1: http://stackoverflow.com/questions/5943394/why-is-inserting-entities-in-ef-4-1-so-slow-compared- to-objectcontext/5943699 # 5943699 et http://stackoverflow.com/questions/5940225/fastest-way-of-inserting-in-entity-framework/5942176#5942176 La clé est principalement de désactiver la détection automatique des changements. Je ne vois pas de relation avec DatabaseGeneratedOption, mais peut-être que ça aide quand même. – Slauma
Désactiver AutoDetectChangesEnabled n'améliore pas vraiment les performances dans mon cas (mais je le fais). L'accélération de ne pas utiliser DatabaseGeneratedOption.Identity est beaucoup plus élevée. – Fox32