Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilRichard Vlček
1
© 2015 Profinit. All rights reserved. Entity Framework: Optimalizace a záludnosti Tomáš Vichta28.11.2011
2
© 2015 Profinit. All rights reserved. 2 Představení Zajímavé projekty –Platební brána PaySec –Poplatky a reporting pro obchody s cennými papíry –Personalizace elektronických cestovních pasů –Integrační platforma pro účetní systém –Párování bankovních výpisů –Generování platebních příkazů Tomáš Vichta Nezávislý konzultant, spolupracovník Profinit s.r.o. Specializace –Technická analýza a design –Vývoj.NET, MS SQL, Oracle
3
© 2015 Profinit. All rights reserved. 3 Entity Framework: Optimalizace a záludnosti o Zpracování dotazu o Futures o Hromadné zpracování o Paralelní zpracování
4
© 2015 Profinit. All rights reserved. 4 Zpracování dotazu o První metoda, která nevrací IQueryable, vygeneruje dotaz do DB –Např. ToArray(), ToList() o Where(Func predicate) –Filtrovací podmínku provede až klient (.NET) –Tzn. vede typicky na select celé tabulky o Je potřeba použít Expression > –EF musí umět serializovat do SQL –Pokud neumí, exception až v runtime
5
© 2015 Profinit. All rights reserved. 5 Zpracování dotazu
6
© 2015 Profinit. All rights reserved. 6 Futures o nuget balíček EntityFramework.ExtendedEntityFramework.Extended o Pošle více EF dotazů do DB najednou, jedním SQL dotazem o Úspora času na roundtripu –síťová komunikace –interní zpracování v.NET komponentech (user code, internal EF code) –interní zpracování v DB serveru o Má smysl řešit –při velkých požadavcích na výkon a očekávanému velkému zatížení aplikace –pokud lze zřetězit více (nezávislých) dotazů za sebou –a nebo místo toho kód zabalit např. do stored procedure, která toho může uvnitř udělat více, a také může vrátit více resultsetů zpět do EF (podporuje např. MS SQL)
7
© 2015 Profinit. All rights reserved. 7 Hromadné zpracování UPDATE, DELETE o Potřeba řešit při insert/update/delete řádově stovek a více entit najednou o EF obecně není dělaný na hromadné operace o Možnosti –Vypnout DbContext.Configuration. AutoDetectChangesEnabled a ProxyCreationEnabled, ValidateOnSaveEnabled V EF6 málo významný vliv na výkon Nefunguje ChangeTracking, do DB jde také sada samostatných per-entity příkazů –Dávkové UPDATE/DELETE operace pomocí EntityFramework.ExtendedEntityFramework.Extended Obalí EF dotaz UPDATE/DELETE klauzulí Méně efektivní, než ručně napsaný UPDATE/DELETE, ale mnohem výkonnější, než samostatné příkazy pro jednotlivé entity Nevýhoda – jde mimo ChangeTracking –Ručně psaný UPDATE, DELETE v.NET kódu Nebo uložená procedura Nejrychlejší Opět přicházíme o ChangeTracking
8
© 2015 Profinit. All rights reserved. 8 Hromadné zpracování BULK INSERT o SQL BULK INSERT o Řádově rychlejší, než klasický INSERT o Při špatném použití riziko insertu nekonzistentních dat! o V.NET třída System.Data.SqlClient.SqlBulkCopy –Použití přímo této třídy by bylo nejefektivnější o EF wrapper - např. nuget EntityFramework.BulkInsertEntityFramework.BulkInsert –Jde o extrémní zneužití EF, ale funguje to… o Nezapomínat na paměťové nároky
9
© 2015 Profinit. All rights reserved. 9 Paralelní zpracování o EF context není thread safe o Nelze paralelizovat na stejné DB session (DbContextu) –.NET lockováním DB dotazů si moc nepomůžete – DB operace je obvykle to, co trvá nejdéle. o Pozor na deadlocky, resource contention, atd. o Nejjednodušší - paralelizovat co nejméně o Nezapomínat - ASP.NET web – thread per request, tzn. implicitně paralelní prostředí! Obdobně desktop aplikace. o Obvykle – samostatný DbContext pro každou paralelní větev (thread, task)
10
© 2015 Profinit. All rights reserved. Diskuze
11
© 2015 Profinit. All rights reserved. Díky za pozornost 1
12
© 2015 Profinit. All rights reserved. Profinit, s.r.o., Tychonova 2, 160 00 Praha 6, +420 224 316 016, www.profinit.eu Společnost PROFINIT je členem nadnárodní skupiny New Frontier Group, která je leadrem v oblasti digitální transformace organizací a firem ve střední a východní Evropě. S více než 2000 zaměstnanci v 17 zemích patří mezi deset největších poskytovatelů ICT služeb v celém CEE regionu a řadí se ke špičce v oblasti vývoje software na zakázku, data managementu, datových skladů a business intelligence. PROFINIT má řadu významných zákazníků z finančního a telekomunikačního sektoru, utilit a státní správy. Společnost se primárně zaměřuje na konzultační služby v oblasti digitální transformace, technologické služby a outsourcing. Podle údajů IDC (2012) patří PROFINIT mezi 5 největších firem v oblasti vývoje software na zakázku v České Republice a je držitelem řady dalších ocenění. Shaping future, delivering results!
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.