Programmering

Beste fremgangsmåter for å forbedre ytelsen til Entity Framework

Microsofts Entity Framework er et utvidet ORM som hjelper deg med å isolere objektmodellen til applikasjonen din fra datamodellen. Det er et open source ORM-rammeverk for ADO.Net og er inkludert som en del av .Net Framework. I dette innlegget vil jeg presentere noen tips som kan følges for å optimalisere Entity Framework-ytelsen. I avsnittene som følger vil jeg undersøke noen tips som kan bli tatt i bruk for å forbedre applikasjonsytelsen når du jobber med Entity Framework.

Representerer enhetsdatamodellen din en enkelt arbeidsenhet?

Når du oppretter EDM (Entity Data Model), bør du sørge for at EDM representerer en enkelt arbeidsenhet og ikke hele databasen, spesielt når du har mange objekter (tabeller, lagrede prosedyrer, visninger osv.) I databasen din som er frakoblet. eller er ikke nødvendig for en bestemt arbeidsenhet. Hvis EDM representerer hele databasen når den ikke er nødvendig, kan den forringe applikasjonens ytelse på grunn av behovet for å laste mange unødvendige objekter i minnet. I hovedsak bør du dele opp en datamodell for store enheter i mindre modeller med hver modell som representerer en arbeidsenhet.

Du kan referere til denne MSDN-artikkelen for mer informasjon om hvordan ytelsen til Entity Framework kan forbedres.

Deaktiver endringssporing

Du bør deaktivere endringssporing hvis det ikke er nødvendig. Viktigst av alt, du trenger ikke endringssporing når du bare vil hente data, og oppdateringer på dataene som er lest er ikke nødvendig i det hele tatt. Du kan bruke følgende utsagn for å deaktivere endringssporing eller cache resultatet av en spørring når du vil hente kunder fra databasen uten å måtte oppdatere postene.

Hvis du vil deaktivere objektsporing for kundetabellen, kan du bruke følgende kode.

PayrollContext context = ny PayrollContext ();

Reduser kostnadene for visning ved å generere visninger

Opprettelsen av ObjectContext er en kostbar operasjon, da den innebærer kostnadene for å laste inn og validere metadataene. Du bør dra nytte av forhåndsgenererte visninger for å redusere responstiden når den første forespørselen blir utført. I det vesentlige skaper Entity Framework-kjøretiden et sett med klasser (også kalt visningen) når objektkonteksten instanseres for første gang. Du kan redusere denne overhead ved å generere visningen for EDMX-filen ved å bruke kommandolinjeverktøyet EdmGen.exe eller T4-maler. Merk at hvis skjemafilene til modellen har endret seg, må du generere visningsfilen på nytt ved å kjøre EdmGen.exe med / mode: ViewGeneration-flagget. Du kan også forhåndsgenere visninger med en kode først-modell.

Deaktiver automatisk gjenkjenning av endringer

Når du prøver å oppdatere databasen, må Entity Framework vite endringene som er gjort i en enhet fra det tidspunktet den ble lastet inn i minnet. Denne endringsdeteksjonen gjøres ved å sammenligne de gamle verdiene til egenskapene med de nye eller endrede verdiene når du ringer til metodene som, Finn (), Fjern (), Legg til (), Fest () og SaveChanges () -metodene. Denne endringsdeteksjonen er veldig kostbar og kan forringe applikasjonens ytelse først og fremst når du jobber med mange enheter. Du kan deaktivere endringsdeteksjon ved hjelp av følgende kode.

Når du vil deaktivere deteksjonsendring, er det en god praksis å deaktivere den i en prøve / fangst-blokk og deretter aktivere den på nytt i den endelige blokken. Merk at du kan ignorere dette når du jobber med et relativt lite datasett - du vil få betydelige ytelsesgevinster ved å slå av endringsdeteksjon når du jobber med et stort sett med data.

Andre punkter å huske på

Bruk projeksjoner til å bare velge feltene som er nødvendige når du henter data. Du bør unngå å hente felt som ikke er nødvendig.

Følgende kodebit illustrerer hvordan du kan bruke henting av data på en sidet måte - legg merke til hvordan startsideindeksen og sidestørrelsen har blitt brukt til å velge bare de dataene som er nødvendige.

int pageSize = 25, startingPageIndex = 1;

NorthwindEntities dataContext = nye NorthwindEntities ();

Liste lstCus = dataContext.tblCustomers.Take (pageSize)

.Skip (startingPageIndex * pageSize)

.Å liste opp();

Du bør også velge riktig samling og bruke kompilerte spørsmål for å forbedre ytelsen til LINQ-spørsmålene dine når du henter data eksponert av EDM. Unngå å trekke alle databaseobjektene i en enhetsdatamodell. Hent bare antall poster som trengs, og unngå å bruke "Inneholder" når du bruker LINQ til Entities. Du kan bruke personsøk for å bare hente dataene som er bedt om eller begrense datamengden som blir hentet fra databasen. Du bør også legge til indekser til enhetene dine ved å ringe til CreateIndex () -metoden.

Du kan lære mer om ytelseshensyn når du bruker Entity Framework fra denne lenken.

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