Programmēšana

Labākā prakse Entity Framework veiktspējas uzlabošanai

Microsoft Entity Framework ir paplašināta ORM, kas palīdz izolēt lietojumprogrammas objekta modeli no datu modeļa. Tas ir ADO.Net atvērtā pirmkoda ORM ietvars un ir iekļauts .Net Framework daļā. Šajā amatā es sniegšu dažus padomus, kurus var izmantot, lai optimizētu Entity Framework veiktspēju. Turpmākajās sadaļās es izskatīšu dažus padomus, kurus var izmantot lietojumprogrammu veiktspējas uzlabošanai, strādājot ar Entity Framework.

Vai jūsu entītijas datu modelis ir viena darba vienība?

Veidojot savu EDM (entītiju datu modeli), jums jāpārliecinās, ka EDM pārstāv vienu darba vienību, nevis visu datu bāzi, it īpaši, ja jūsu datu bāzē ir daudz atvienotu objektu (tabulas, saglabātās procedūras, skati utt.) vai nav nepieciešami noteiktai darba vienībai. Ja jūsu EDM attēlo visu datu bāzi, kad tas nav vajadzīgs, tas var pasliktināt lietojumprogrammas veiktspēju, jo atmiņā ir jāielādē daudzi nevajadzīgi objekti. Būtībā jums vajadzētu sadalīt lielu entītiju datu modeli mazākos, katram modelim attēlojot darba vienību.

Lai iegūtu papildinformāciju par to, kā uzlabot Entity Framework veiktspēju, varat atsaukties uz šo MSDN rakstu.

Atspējot izmaiņu izsekošanu

Ja tas nav nepieciešams, atspējojiet izmaiņu izsekošanu. Vissvarīgākais ir tas, ka jums nav nepieciešama izmaiņu izsekošana, kad vēlaties iegūt tikai datus, un lasīto datu atjauninājumi vispār nav vajadzīgi. Varat izmantot šo priekšrakstu, lai atspējotu izmaiņu izsekošanu vai saglabātu vaicājuma rezultātu kešatmiņā, kad vēlaties izgūt klientus no datu bāzes bez ierakstu atjaunināšanas.

Ja vēlaties atspējot objektu izsekošanu tabulai Klienti, varat izmantot šo kodu.

PayrollContext context = new PayrollContext ();

Samaziniet skatu veidošanas izmaksas, izmantojot iepriekš ģenerētus skatus

ObjectContext izveide ir dārga darbība, jo tā ietver metadatu ielādes un apstiprināšanas izmaksas. Jums vajadzētu izmantot iepriekš ģenerēto skatu priekšrocības, lai samazinātu atbildes laiku, kad tiek izpildīts pirmais pieprasījums. Būtībā izpildes laiks Entity Framework izveido klašu kopu (saukts arī par skatu), kad objekta konteksts tiek pirmo reizi instancēts. Jūs varat samazināt šo pieskaitāmo vietu, iepriekš ģenerējot skatu EDMX failam, izmantojot komandrindas rīku EdmGen.exe vai T4 veidnes. Ņemiet vērā, ka, ja modeļa shēmas faili ir mainījušies, skatu fails būs jāģenerē atkārtoti, izpildot EdmGen.exe ar karodziņu / mode: ViewGeneration. Varat arī iepriekš ģenerēt skatus, vispirms izmantojot kodu.

Atspējot izmaiņu automātisko noteikšanu

Mēģinot atjaunināt datu bāzi, Entity Framework jāzina izmaiņas, kas uzņēmumā veiktas kopš brīža, kad tā tika ielādēta atmiņā. Šī izmaiņu noteikšana tiek veikta, salīdzinot rekvizītu vecās vērtības ar jaunajām vai mainītajām vērtībām, veicot zvanu ar metodēm, piemēram, Atrast (), Noņemt (), Pievienot (), Pievienot () un SaveChanges (). Šī izmaiņu noteikšana ir ļoti dārga un var pasliktināt lietojumprogrammas veiktspēju galvenokārt tad, ja strādājat ar daudzām entītijām. Izmaiņu noteikšanu var atspējot, izmantojot šo kodu.

Ja vēlaties atspējot izmaiņu noteikšanu, ieteicams to atspējot try / catch blokā un pēc tam atkārtoti iespējot to pēdējā blokā. Ņemiet vērā, ka to varat neņemt vērā, strādājot ar salīdzinoši nelielu datu kopu - jūs iegūtu ievērojamu veiktspējas pieaugumu, izslēdzot izmaiņu noteikšanu, strādājot ar lielu datu kopu.

Citi punkti, kas jāpatur prātā

Izmantojiet projekcijas, lai atlasītu tikai tos laukus, kas nepieciešami datu izgūšanai. Jums vajadzētu izvairīties no nevajadzīgu lauku izgūšanas.

Šis koda fragments parāda, kā datus var izmantot lapošanas veidā - ņemiet vērā, kā sākumlapas indekss un lapas izmērs ir izmantots, lai atlasītu tikai nepieciešamos datus.

int pageSize = 25, sākotPageIndex = 1;

NorthwindEntities dataContext = new NorthwindEntities ();

Saraksts lstCus = dataContext.tblCustomers.Take (pageSize)

.Skip (startPageIndex * pageSize)

.Uzskaitīt();

Jums arī jāizvēlas atbilstoša kolekcija un jāizmanto apkopoti vaicājumi, lai uzlabotu LINQ vaicājumu veiktspēju, izgūstot datus, kurus pakļauj EDM. Neizvelciet visus datu bāzes objektus vienā entītijas datu modelī. Iegūstiet tikai nepieciešamo ierakstu skaitu un, lietojot LINQ entītijām, izvairieties lietot “Satur”. Varat izmantot peidžeru, lai izgūtu tikai pieprasītos datus vai ierobežotu datu bāzē iegūto datu apjomu. Jums arī jāpievieno indeksi savām entītijām, veicot izsaukumu uz metodi CreateIndex ().

No šīs saites varat uzzināt vairāk par veiktspējas apsvērumiem, izmantojot Entity Framework.

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