Programovanie

Najlepšie postupy na zlepšenie výkonu Entity Framework

Microsoft Entity Framework je rozšírený ORM, ktorý vám pomôže izolovať objektový model vašej aplikácie od dátového modelu. Je to open source rámec ORM pre ADO.Net a je zahrnutý ako súčasť .Net Framework. V tomto príspevku predstavím niekoľko rád, pomocou ktorých je možné optimalizovať výkon Entity Framework. V nasledujúcich častiach by som preskúmal niekoľko tipov, ktoré je možné prijať na zlepšenie výkonu aplikácií, keď pracujete s Entity Framework.

Predstavuje váš dátový model entity jednu pracovnú jednotku?

Pri vytváraní EDM (Entity Data Model) by ste sa mali ubezpečiť, že EDM predstavuje jednu pracovnú jednotku a nie celú databázu, najmä ak máte v databáze odpojených veľa objektov (tabuľky, uložené procedúry, zobrazenia atď.) alebo nie sú potrebné pre konkrétnu pracovnú jednotku. Ak váš EDM predstavuje celú databázu, keď to nie je potrebné, môže to znížiť výkon aplikácie z dôvodu potreby načítania mnohých nepotrebných objektov do pamäte. V zásade by ste mali veľký dátový model entity rozdeliť na menšie, pričom každý model predstavuje jednotku práce.

V tomto článku na webe MSDN nájdete ďalšie informácie o tom, ako je možné zlepšiť výkon platformy Entity Framework.

Zakázať sledovanie zmien

Ak to nie je potrebné, mali by ste zakázať sledovanie zmien. Najdôležitejšie je, že sledovanie zmien nepotrebujete, keď chcete iba načítať údaje, a aktualizácie načítaných údajov nie sú vôbec potrebné. Nasledujúce vyhlásenie môžete použiť na zakázanie sledovania zmien alebo na medzipamäť výsledku dotazu, ak chcete získať zákazníkov z databázy bez potreby aktualizácie záznamov.

Ak chcete zakázať sledovanie objektov pre tabuľku Zákazníci, môžete použiť nasledujúci kód.

PayrollContext context = nový PayrollContext ();

Znížte náklady na generovanie zobrazenia pomocou vopred vygenerovaných zobrazení

Vytvorenie ObjectContext je nákladná operácia, pretože zahŕňa náklady na načítanie a overenie metadát. Mali by ste využiť výhody predgenerovaných pohľadov na zníženie času odozvy pri vykonaní prvej požiadavky. Modul runtime Entity Framework v podstate vytvára množinu tried (nazývaných tiež pohľad), keď sa kontext objektu po prvý raz vytvorí. Túto réžiu môžete znížiť predbežným vygenerovaním zobrazenia pre súbor EDMX pomocou nástroja príkazového riadku EdmGen.exe alebo šablón T4. Upozorňujeme, že ak sa zmenili súbory schémy modelu, budete musieť znova vygenerovať súbor zobrazení spustením súboru EdmGen.exe s príznakom / mode: ViewGeneration. Môžete tiež predgenerovať zobrazenia pomocou modelu s prvým kódom.

Zakázať automatickú detekciu zmien

Pri pokuse o aktualizáciu databázy potrebuje Entity Framework poznať zmeny, ktoré sa v entite vykonali od jej načítania do pamäte. Táto detekcia zmien sa vykonáva porovnaním starých hodnôt vlastností s novými alebo zmenenými hodnotami, keď voláte metódy ako metódy Find (), Remove (), Add (), Attach () a SaveChanges (). Táto detekcia zmien je veľmi nákladná a môže znížiť výkon aplikácie predovšetkým vtedy, keď pracujete s mnohými entitami. Detekciu zmien môžete zakázať pomocou nasledujúceho kódu.

Ak chcete zakázať detekciu zmien, je dobrým zvykom ju deaktivovať vo vnútri bloku try / catch a potom ju znova povoliť vo vnútri konečne bloku. Upozorňujeme, že toto môžete ignorovať, keď pracujete s relatívne malou množinou údajov - výrazného zvýšenia výkonu by ste dosiahli vypnutím detekcie zmien, keď pracujete s veľkou množinou údajov.

Ďalšie body, ktoré treba pamätať

Pomocou projekcií vyberte iba polia, ktoré sú potrebné pri načítaní údajov. Mali by ste sa vyhnúť načítaniu polí, ktoré nie sú potrebné.

Nasledujúci úryvok kódu ilustruje, ako môžete použiť načítanie údajov stránkovaným spôsobom - všimnite si, ako sa na začiatočný index stránky a veľkosť stránky vybrali iba tie údaje, ktoré sú potrebné.

int pageSize = 25, startingPageIndex = 1;

NorthwindEntities dataContext = nový NorthwindEntities ();

Zoznam lstCus = dataContext.tblCustomers.Take (pageSize)

.Skip (startingPageIndex * pageSize)

.Listovať();

Mali by ste tiež zvoliť príslušnú kolekciu a použiť skompilované dotazy na zlepšenie výkonu svojich LINQ dotazov pri načítaní údajov vystavených EDM. Vyhnite sa ťahaniu všetkých databázových objektov do jedného dátového modelu entity. Načítajte iba taký počet záznamov, ktorý je potrebný, a pri používaní LINQ to Entities nepoužívajte „Obsahuje“. Pomocou stránkovania môžete načítať iba údaje, ktoré sú požadované, alebo obmedziť množstvo údajov, ktoré sa načítajú z databázy. Mali by ste tiež pridať indexy do svojich entít volaním metódy CreateIndex ().

Z tohto odkazu sa dozviete viac o hľadiskách výkonu pri používaní Entity Framework.

$config[zx-auto] not found$config[zx-overlay] not found