|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : mars 2004 Messages : 6 387 ![]() |
Bonjour à tous,
J'ai rédigé ce petit papier pour bousculer, un peu, les certitudes au sujet des ORM et de leurs performances: http://immobilis.developpez.com/tuto...ity-framework/ N'hésitez pas à me dire ce que vous en pensez ![]() A+
__________________
Mon Blog![]() Minichat multicast UDP sous Mango, Linq to SQL vs SQL vs Entity Framework, C# Google Distance Matrix, Import/export de données en ASP.Net, L'architecture multicouche, Internationalisation en ASP.Net |
|
60
|
|
|
#2 |
![]() ![]() |
Salut,
J'y ai jeté un coup d'oeil vite fait ! Le sujet abordé est intéressant et l'article très bien écrit. J'ai mis l'article dans ma liste de tutos en attente. A première vue, j'ai l'impression que tu t'es trop acharné sur l'architecture de ton application alors qu'il s'agit juste de tester et comparer les performance de requêtes (SQL, Ling To SQL et Linq To Entities).
__________________
Consultant .Net chez SoftFluent Découvrir notre produit CodeFluent Entities Adhérer à l'association Fier d'être développeur ![]() Les FAQs sur les technologies .Net voir ici Les cours et tutos sur les technologies .Net voir ici Les critiques sur les livres parlant des technologies .Net voir ici Pensez à la balise [CODE] Pensez au tag si votre problème est résolu
|
|
00
|
|
|
#3 | |
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : mars 2004 Messages : 6 387 ![]() |
Salut
Citation:
Tu me diras si cet objectif est atteint A+
__________________
Mon Blog![]() Minichat multicast UDP sous Mango, Linq to SQL vs SQL vs Entity Framework, C# Google Distance Matrix, Import/export de données en ASP.Net, L'architecture multicouche, Internationalisation en ASP.Net |
|
|
00
|
|
|
#4 |
![]() ![]() |
__________________
Consultant .Net chez SoftFluent Découvrir notre produit CodeFluent Entities Adhérer à l'association Fier d'être développeur ![]() Les FAQs sur les technologies .Net voir ici Les cours et tutos sur les technologies .Net voir ici Les critiques sur les livres parlant des technologies .Net voir ici Pensez à la balise [CODE] Pensez au tag si votre problème est résolu
|
|
00
|
|
|
#5 |
|
Membre éclairé
![]() Inscription : juillet 2007 Messages : 312 ![]() |
Excellent article, très intéressant, pour faire des choix et connaitre les différences.
L'introduction, quoi qu'un peu longue, sur ton archi, amène bien le découpage et les besoins. A noter également, avec une bonne abstraction on peut passer de l'un à l'autre sans (trop) de mal. |
|
|
00
|
|
|
#6 |
![]() ![]() Clément LehalleArchitecte Logiciel Inscription : avril 2008 Messages : 1 426 ![]() |
Comme je te l'ai déjà dit dans un autre poste, très bon article.
Par contre à la deuxième lecture quelque chose me surprend : L'utilisation de Linq to Entities avec des SP est plus performantes que Linq to Entities et très proche des performances de SQL(Command)... Cela me surprend d'autant que j'ai eu les résultats très différent en faisant un benchmark sur mon application au boulot. Pour info j'avais un programme qui en gros, supprimait 100 lignes, en rajoutait 100, et faisais ça sur environ 1 million de lignes en tout. Les résultats que j'ai obtenu, c'est que LinqToEntitesSP donne quasiment les même performances que LinqToEntites, alors que SQL(Command) était 9 fois plus rapide. Du coup je me pose la question de savoir s'il y a une différence de performance entre : et Et si par hasard on n'a pas, toi comme moi, des mauvaises optimisations au niveau du code...
__________________
One minute was enough, Tyler said, a person had to work hard for it, but a minute of perfection was worth the effort. A moment was the most you could ever expect from perfection. -- Chuck Palahniuk, Fight Club, Chapter 3 -- |
|
|
00
|
|
|
#7 | |||
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : mars 2004 Messages : 6 387 ![]() |
Citation:
Je regarde surtout le tableau récapitulatif. Sur mon portable Linq+Cmd effectue deux cycles complets le plus rapidement. C'est très serré avec EntitiesSqlSP. Ensuite il faut regarder le détail des opérations. Citation:
Code :
exec sp_executesql N'insert [dbo].[Customers]([Id], [LastName], [FirstName]) values (@0, @1, @2) ',N'@0 uniqueidentifier,@1 varchar(50),@2 varchar(50)',@0='63716843-0523-43DB-814D-720F0EA89D55', @1='7pL7ob8pmrWDC0k',@2='7pL7ob8pmrWDC0krI0a5' Code :
exec [dbo].[CreateCustomer] @Id='E70A41CC-CC1C-4328-B24C-DA02038B6929', @LastName='lpPdOXNPPov8Qg5',@FirstName='lpPdOXNPPov8Qg5MLDVy' Citation:
Sans procédure stockée: Avec procédure stockée:
__________________
Mon Blog![]() Minichat multicast UDP sous Mango, Linq to SQL vs SQL vs Entity Framework, C# Google Distance Matrix, Import/export de données en ASP.Net, L'architecture multicouche, Internationalisation en ASP.Net |
|||
|
00
|
|
|
#8 |
![]() ![]() Clément LehalleArchitecte Logiciel Inscription : avril 2008 Messages : 1 426 ![]() |
Non justement ce n'est pas une procédure stockée, c'est une méthode générée par EF.
Les procédures stockées ne sont pas "plus rapides" avec SQL Server 2008 R2 à ma connaissance, sauf si tu as poussé le vice jusqu'à optimiser le plan d'éxecution, et encore... Et c'est pour ça que ça me surprend. Le bon dernier c'est Linq et ça ne m'étonne pas, ce qui me surprend, c'est que Linq to Entites avec SP soit bien plus performant que Linq to Entities tout court, et qu'il ait des performances proche de SQL Command. Après ça peut venir du jeu de test...
__________________
One minute was enough, Tyler said, a person had to work hard for it, but a minute of perfection was worth the effort. A moment was the most you could ever expect from perfection. -- Chuck Palahniuk, Fight Club, Chapter 3 -- |
|
|
00
|
|
|
#9 | |||||
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : mars 2004 Messages : 6 387 ![]() |
Citation:
En premier les méthodes natives, en deuxième les méthodes avec les proc stock. Je doutes que la différence change quelque soit l'environnement. Création, Entity seul: Code :
exec sp_executesql N'insert [dbo].[Customers]([Id], [LastName], [FirstName]) values (@0, @1, @2)',N'@0 uniqueidentifier,@1 varchar(50),@2 varchar(50)',@0='DAF9D021-F60E-47EE-881C-851DFF8F8EEA',@1='dMtAktsNSeobzEY',@2='dMtAktsNSeobzEYsK58x' Code :
exec [dbo].[CreateCustomer] @Id='12503D00-B5C2-40CD-B0A2-FCBC96ECC72A',@LastName='q0SuytswT6DYuOM',@FirstName='q0SuytswT6DYuOM3s2NJ' Code :
Code :
__________________
Mon Blog![]() Minichat multicast UDP sous Mango, Linq to SQL vs SQL vs Entity Framework, C# Google Distance Matrix, Import/export de données en ASP.Net, L'architecture multicouche, Internationalisation en ASP.Net |
|||||
|
00
|
|
|
#10 |
![]() ![]() Clément LehalleArchitecte Logiciel Inscription : avril 2008 Messages : 1 426 ![]() |
Je vais essayer de prendre le temps ce week end de faire le test, entre EF avec SP, EF sans SP et SQL Command brut, parce que les différences que tu montres me surprennes.
Je n'ai pas suivi tout ton code, mais quand tu fais des insert de masse, tu passes des collections à tes méthodes, ou tu passes individuellement chaque objet ? C'est peut-être ce qui fait la différence entre nos benchmark !
__________________
One minute was enough, Tyler said, a person had to work hard for it, but a minute of perfection was worth the effort. A moment was the most you could ever expect from perfection. -- Chuck Palahniuk, Fight Club, Chapter 3 -- |
|
|
00
|
|
|
#11 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : mars 2004 Messages : 6 387 ![]() |
Je les insère un par un. Pour de vrais insertions en masse, il faudrait utiliser un bulkinsert.
__________________
Mon Blog![]() Minichat multicast UDP sous Mango, Linq to SQL vs SQL vs Entity Framework, C# Google Distance Matrix, Import/export de données en ASP.Net, L'architecture multicouche, Internationalisation en ASP.Net |
|
00
|
|
|
#12 |
|
Membre Expert
![]() Inscription : avril 2004 Messages : 1 246 ![]() |
Faudrait que SQLPro participe à cette discussion. Il pourrait y apporter une grosse valeur ajoutée, je pense.
Sinon, pour l'article, un conseil : évite le code centré. C'est assez illisible. |
|
|
10
|
|
|
#13 | |
![]() ![]() Clément LehalleArchitecte Logiciel Inscription : avril 2008 Messages : 1 426 ![]() |
Citation:
(ça tombe bien j'avais pas envie de coder avec le temps qu'il fait...) C'est dommage qu'on ne puisse pas de la même façon optimiser les méthodes EF. Parce que ce qui cause une perte de temps c'est la recherche de l'ID systématique, notamment pour l'insert et le delete. Tu récupères les requêtes générées via SQL Profiler ?
__________________
One minute was enough, Tyler said, a person had to work hard for it, but a minute of perfection was worth the effort. A moment was the most you could ever expect from perfection. -- Chuck Palahniuk, Fight Club, Chapter 3 -- |
|
|
|
00
|
|
|
#14 | |
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : mars 2004 Messages : 6 387 ![]() |
Citation:
Oui j'utilise SQL Server Profiler.
__________________
Mon Blog![]() Minichat multicast UDP sous Mango, Linq to SQL vs SQL vs Entity Framework, C# Google Distance Matrix, Import/export de données en ASP.Net, L'architecture multicouche, Internationalisation en ASP.Net |
|
|
00
|
|
|
#15 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : mars 2004 Messages : 6 387 ![]() |
Le quoi?
__________________
Mon Blog![]() Minichat multicast UDP sous Mango, Linq to SQL vs SQL vs Entity Framework, C# Google Distance Matrix, Import/export de données en ASP.Net, L'architecture multicouche, Internationalisation en ASP.Net |
|
00
|
|
|
#16 | |||
|
Expert Confirmé
![]() |
Citation:
->Immobilis: que te retournes celà: Code :
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. MCTS Database Development |
|||
|
|
00
|
|
|
#17 | ||||
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : mars 2004 Messages : 6 387 ![]() |
Citation:
Citation:
__________________
Mon Blog![]() Minichat multicast UDP sous Mango, Linq to SQL vs SQL vs Entity Framework, C# Google Distance Matrix, Import/export de données en ASP.Net, L'architecture multicouche, Internationalisation en ASP.Net |
||||
|
00
|
|
|
#18 |
|
Expert Confirmé
![]() |
C'est EF qui a crée lui même cette SP?
Si oui bon les règles de nommage! je rêve!
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. MCTS Database Development |
|
|
00
|
|
|
#19 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : mars 2004 Messages : 6 387 ![]() |
Non non, c'est moi pourquoi? J'ai enfreint une règle de nommage?
__________________
Mon Blog![]() Minichat multicast UDP sous Mango, Linq to SQL vs SQL vs Entity Framework, C# Google Distance Matrix, Import/export de données en ASP.Net, L'architecture multicouche, Internationalisation en ASP.Net |
|
00
|
|
|
#20 | |
|
Expert Confirmé
![]() |
Citation:
http://sqlpro.developpez.com/cours/standards/
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. MCTS Database Development |
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com