Microsofts Entity Framework er en udvidet ORM, der hjælper dig med at isolere objektmodellen for din applikation fra datamodellen. Det er en open source ORM-ramme til ADO.Net og er inkluderet som en del af .Net Framework. I dette indlæg vil jeg præsentere et par tip, der kan følges for at optimere Entity Framework-ydeevnen. I de følgende afsnit vil jeg undersøge et par tip, der kan vedtages for at forbedre applikationsydelsen, når du arbejder med Entity Framework.
Representerer din enhedsdatamodel en enkelt arbejdsenhed?
Når du opretter din EDM (Entity Data Model), skal du sikre dig, at EDM repræsenterer en enkelt arbejdsenhed og ikke hele databasen, især når du har mange objekter (tabeller, lagrede procedurer, visninger osv.) I din database, der er afbrudt eller er ikke nødvendige for en bestemt enhed. Hvis din EDM repræsenterer hele databasen, når den ikke er nødvendig, kan den forringe applikationens ydeevne på grund af behovet for at indlæse mange unødvendige objekter i hukommelsen. I det væsentlige skal du opdele en datamodel med stor enhed i mindre, hvor hver model repræsenterer en arbejdsenhed.
Du kan henvise til denne MSDN-artikel for at få flere oplysninger om, hvordan Entity Framework-ydelsen kan forbedres.
Deaktiver ændringssporing
Du bør deaktivere ændringssporing, hvis det ikke er nødvendigt. Vigtigst er det, at du ikke har brug for ændringssporing, når du bare vil hente data, og opdateringer af de læste data er slet ikke nødvendige. Du kan bruge følgende udsagn til at deaktivere ændringssporing eller cache resultatet af en forespørgsel, når du vil hente kunder fra databasen uden behov for at opdatere posterne.
Hvis du vil deaktivere objektsporing for tabellen Kunder, kan du bruge følgende kode.
PayrollContext context = ny PayrollContext ();
Reducer omkostningerne ved visningsgenerering ved hjælp af prægenererede visninger
Oprettelsen af ObjectContext er en kostbar handling, da den involverer omkostningerne ved indlæsning og validering af metadataene. Du bør drage fordel af prægenererede visninger for at reducere svartiden, når den første anmodning udføres. I det væsentlige opretter Entity Framework-runtime et sæt klasser (også kaldet visningen), når objektkonteksten instantieres for første gang. Du kan reducere denne overhead ved at generere visningen til EDMX-filen ved hjælp af kommandolinjeværktøjet EdmGen.exe eller T4-skabeloner. Bemærk, at hvis skema-filerne i modellen er ændret, skal du genoprette visningsfilen ved at udføre EdmGen.exe med / mode: ViewGeneration-flag. Du kan også pre-generere visninger med en kode første model.
Deaktiver automatisk registrering af ændringer
Når du prøver at opdatere databasen, skal Entity Framework kende de ændringer, der er foretaget i en enhed, fra den blev indlæst i hukommelsen. Denne ændringsdetektering udføres ved at sammenligne de gamle værdier af egenskaberne med de nye eller ændrede værdier, når du foretager et opkald til metoderne som Find (), Fjern (), Tilføj (), Vedhæft () og SaveChanges () -metoder. Denne ændringsregistrering er meget dyr og kan forringe applikationens ydeevne primært, når du arbejder med mange enheder. Du kan deaktivere ændringsregistrering ved hjælp af følgende kode.
Når du vil deaktivere ændringsdetektering, er det en god praksis at deaktivere den inde i en prøve / fangst-blok og derefter genaktivere den inden i den endelige blok. Bemærk, at du kan ignorere dette, når du arbejder med et relativt lille datasæt - du ville få betydelige præstationsgevinster ved at deaktivere ændringsdetektering, når du arbejder med et stort datasæt.
Andre punkter at huske på
Brug fremskrivninger til kun at vælge de felter, der er nødvendige, når data hentes. Du bør undgå at hente felter, der ikke er nødvendige.
Følgende kodestykke illustrerer, hvordan du kan bruge hente data på en sidet måde - bemærk, hvordan startsideindekset og sidestørrelsen er blevet brugt til kun at vælge de data, der er nødvendige.
int pageSize = 25, startingPageIndex = 1;
NorthwindEntities dataContext = nye NorthwindEntities ();
Liste lstCus = dataContext.tblCustomers.Take (pageSize)
.Skip (startingPageIndex * pageSize)
.ToList ();
Du skal også vælge den relevante samling og bruge kompilerede forespørgsler til at forbedre ydeevnen for dine LINQ-forespørgsler, når du henter data eksponeret af EDM. Undgå at trække i alle databaseobjekterne i en enhedsdatamodel. Hent kun antallet af poster, der er nødvendige, og undgå at bruge "Indeholder", når du bruger LINQ til enheder. Du kan bruge personsøgning til kun at hente de data, der anmodes om eller begrænse mængden af data, der hentes fra databasen. Du skal også tilføje indekser til dine enheder ved at foretage et opkald til CreateIndex () -metoden.
Du kan lære mere om præstationsovervejelserne, når du bruger Entity Framework fra dette link.