Ohjelmointi

Parhaat käytännöt Entity Frameworkin suorituskyvyn parantamiseksi

Microsoftin Entity Framework on laajennettu ORM, joka auttaa sinua eristämään sovelluksesi objektimallin datamallista. Se on avoimen lähdekoodin ORM-kehys ADO.Netille ja se sisältyy osana .Net Frameworkiin. Tässä viestissä esitän muutamia vinkkejä, joita voidaan seurata Entity Frameworkin suorituskyvyn optimoimiseksi. Seuraavissa osissa tarkastelen muutamia vinkkejä, joita voidaan käyttää sovellusten suorituskyvyn parantamiseen, kun työskentelet Entity Frameworkin kanssa.

Edustaako entiteettidatamalli yhtä työyksikköä?

Kun luot EDM: n (Entity Data Model), varmista, että EDM edustaa yhtä työyksikköä eikä koko tietokantaa, varsinkin kun tietokannassasi on monia objekteja (taulukoita, tallennettuja menettelyjä, näkymiä jne.), Jotka eivät ole yhteydessä tai joita ei tarvita tiettyyn työyksikköön. Jos EDM edustaa koko tietokantaa, kun sitä ei tarvita, se voi heikentää sovelluksen suorituskykyä, koska on tarpeen ladata monia tarpeettomia esineitä muistiin. Pohjimmiltaan sinun tulisi hajottaa suuri kokonaisdatamalli pienempiin, kun kukin malli edustaa työn yksikköä.

Tästä MSDN-artikkelista saat lisätietoja entiteettikehyksen suorituskyvyn parantamisesta.

Poista muutosten seuranta käytöstä

Poista muutosten seuranta käytöstä, jos sitä ei tarvita. Mikä tärkeintä, et tarvitse muutosseurantaa, kun haluat vain hakea tietoja, eikä luettujen tietojen päivityksiä tarvita lainkaan. Voit poistaa seuraavan seurannan käytöstä muutosten seurannan käytöstä tai tallentaa kyselyn tuloksen välimuistiin, kun haluat hakea asiakkaita tietokannasta tarvitsematta päivittää tietueita.

Jos haluat poistaa objektien seurannan käytöstä Asiakkaat-taulukossa, voit käyttää seuraavaa koodia.

Palkanlaskentakonteksti-konteksti = uusi Palkkasumma-konteksti ();

Vähennä näkymän luomisen kustannuksia käyttämällä ennalta luotuja näkymiä

ObjectContextin luominen on kallis toimenpide, koska siihen sisältyy metatietojen lataamisen ja vahvistamisen kustannuksia. Sinun tulisi hyödyntää ennalta luotuja näkymiä vasteajan lyhentämiseksi, kun ensimmäinen pyyntö suoritetaan. Pohjimmiltaan Entity Frameworkin ajonaikainen luokkajoukot (kutsutaan myös näkymäksi), kun objektikonteksti on ilmentynyt ensimmäistä kertaa. Voit vähentää tätä yleiskustannusta luomalla ennalta näkymä EDMX-tiedostolle käyttämällä komentorivityökalua EdmGen.exe tai T4-malleja. Huomaa, että jos mallin skeematiedostot ovat muuttuneet, sinun on luotava näkymätiedosto uudelleen suorittamalla EdmGen.exe-tiedosto / mode: ViewGeneration-lipulla. Voit myös luoda ennalta näkymiä ensin koodimallilla.

Poista muutosten automaattinen tunnistus käytöstä

Kun yrität päivittää tietokantaa, Entity Frameworkin on tiedettävä muutokset, jotka on tehty entiteettiin siitä hetkestä lähtien, kun se ladattiin muistiin. Tämä muutosten havaitseminen tapahtuu vertaamalla ominaisuuksien vanhoja arvoja uusiin tai muutettuihin arvoihin, kun soitat menetelmille, kuten Etsi (), Poista (), Lisää (), Liitä () ja SaveChanges (). Tämä muutosten havaitseminen on erittäin kallista ja voi heikentää sovelluksen suorituskykyä ensisijaisesti, kun työskentelet monien entiteettien kanssa. Voit poistaa muutosten havaitsemisen käytöstä seuraavalla koodilla.

Kun haluat poistaa muutosten havaitsemisen käytöstä, on hyvä käytäntö poistaa se käytöstä try / catch-lohkon sisällä ja ottaa se sitten käyttöön viimeisen lohkon sisällä. Huomaa, että voit jättää tämän huomiotta työskennellessäsi suhteellisen pienen tietojoukon kanssa - saisit merkittäviä suorituskyvyn parannuksia poistamalla muutosten havaitsemisen käytöstä, kun työskentelet suuren tietojoukon kanssa.

Muita huomioitavia seikkoja

Käytä projektioita valitaksesi vain kentät, joita tarvitaan tietojen noutamiseen. Vältä tarpeettomien kenttien noutamista.

Seuraava koodinpätkä kuvaa, miten voit hakea tietoja sivutettuna - huomaa, miten aloitussivuhakemistoa ja sivukokoa on käytetty vain tarvittavien tietojen valintaan.

int pageSize = 25, StartPageIndex = 1;

NorthwindEntities dataContext = uudet NorthwindEntities ();

Luettelo lstCus = dataContext.tblCustomers.Take (pageSize)

.Skip (StartPageIndex * pageSize)

.Listata();

Sinun tulisi myös valita sopiva kokoelma ja käyttää koottuja kyselyitä LINQ-kyselyidesi suorituskyvyn parantamiseksi noudettaessa EDM: n altistamia tietoja. Vältä kaikkien tietokantaobjektien vetämistä yhdestä yksikön tietomallista. Hae vain tarvittava tietueiden määrä ja vältä "Sisältää" -toiminnon käyttöä, kun käytät LINQ: ta entiteeteille. Voit hakea hakutoiminnolla vain vaaditut tiedot tai rajoittaa tietokannasta haettujen tietojen määrää. Lisäksi sinun tulisi lisätä hakemistoja entiteetteihisi soittamalla CreateIndex () -menetelmään.

Tästä linkistä saat lisätietoja suorituskyvyn näkökohdista käytettäessä Entity Frameworkia.

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