Προγραμματισμός

Βέλτιστες πρακτικές για τη βελτίωση της απόδοσης του Entity Framework

Το Microsoft Entity Framework είναι ένα εκτεταμένο ORM που σας βοηθά να απομονώσετε το μοντέλο αντικειμένων της εφαρμογής σας από το μοντέλο δεδομένων. Είναι ένα πλαίσιο ανοιχτού κώδικα ORM για το ADO.Net και περιλαμβάνεται ως μέρος του .Net Framework. Σε αυτήν την ανάρτηση, θα παρουσιάσω μερικές συμβουλές που μπορούν να ακολουθηθούν για τη βελτιστοποίηση της απόδοσης του Entity Framework. Στις ενότητες που ακολουθούν, θα εξετάσω μερικές συμβουλές που μπορούν να υιοθετηθούν για τη βελτίωση της απόδοσης της εφαρμογής όταν εργάζεστε με το Entity Framework.

Το μοντέλο δεδομένων οντοτήτων σας αντιπροσωπεύει μια ενιαία μονάδα εργασίας;

Όταν δημιουργείτε το EDM σας (Μοντέλο δεδομένων οντοτήτων) θα πρέπει να διασφαλίσετε ότι το EDM αντιπροσωπεύει μια μεμονωμένη μονάδα εργασίας και όχι ολόκληρη τη βάση δεδομένων, ειδικά όταν έχετε πολλά αντικείμενα (πίνακες, αποθηκευμένες διαδικασίες, προβολές κ.λπ.) στη βάση δεδομένων σας που είναι αποσυνδεδεμένα ή δεν χρειάζονται για μια συγκεκριμένη μονάδα εργασίας. Εάν το EDM σας αντιπροσωπεύει ολόκληρη τη βάση δεδομένων όταν δεν είναι απαραίτητο, μπορεί να υποβαθμίσει την απόδοση της εφαρμογής λόγω της ανάγκης φόρτωσης πολλών περιττών αντικειμένων στη μνήμη. Στην ουσία, θα πρέπει να χωρίσετε ένα μοντέλο δεδομένων μεγάλης οντότητας σε μικρότερα με κάθε μοντέλο να αντιπροσωπεύει μια μονάδα εργασίας.

Μπορείτε να ανατρέξετε σε αυτό το άρθρο MSDN για περισσότερες πληροφορίες σχετικά με τον τρόπο βελτίωσης της απόδοσης του Entity Framework.

Απενεργοποίηση παρακολούθησης αλλαγών

Θα πρέπει να απενεργοποιήσετε την παρακολούθηση αλλαγών εάν δεν είναι απαραίτητη. Το πιο σημαντικό, δεν χρειάζεστε παρακολούθηση αλλαγών, όταν απλώς θέλετε να ανακτήσετε δεδομένα και δεν χρειάζονται καθόλου ενημερώσεις σχετικά με την ανάγνωση δεδομένων. Μπορείτε να χρησιμοποιήσετε την ακόλουθη δήλωση για να απενεργοποιήσετε την παρακολούθηση αλλαγών ή να αποθηκεύσετε προσωρινά το αποτέλεσμα ενός ερωτήματος όταν θέλετε να ανακτήσετε πελάτες από τη βάση δεδομένων χωρίς να χρειάζεται να ενημερώσετε τις εγγραφές.

Εάν θέλετε να απενεργοποιήσετε την παρακολούθηση αντικειμένων για τον πίνακα Πελάτες, μπορείτε να χρησιμοποιήσετε τον ακόλουθο κώδικα.

PayrollContext konteks = νέο PayrollContext ();

Μειώστε το κόστος δημιουργίας προβολών χρησιμοποιώντας Προπαρασκευασμένες προβολές

Η δημιουργία του ObjectContext είναι μια δαπανηρή λειτουργία καθώς περιλαμβάνει το κόστος φόρτωσης και επικύρωσης των μεταδεδομένων. Θα πρέπει να επωφεληθείτε από τις προπαρασκευασμένες προβολές για να μειώσετε το χρόνο απόκρισης κατά την εκτέλεση του πρώτου αιτήματος. Στην ουσία, ο χρόνος εκτέλεσης του Entity Framework δημιουργεί ένα σύνολο κλάσεων (ονομάζεται επίσης προβολή) όταν το περιβάλλον αντικειμένου δημιουργείται για πρώτη φορά. Μπορείτε να μειώσετε αυτήν την επιβάρυνση δημιουργώντας προ της προβολής για το αρχείο EDMX χρησιμοποιώντας το εργαλείο γραμμής εντολών EdmGen.exe ή πρότυπα T4. Σημειώστε ότι εάν τα αρχεία σχήματος του μοντέλου έχουν αλλάξει, θα πρέπει να δημιουργήσετε ξανά το αρχείο προβολών εκτελώντας το EdmGen.exe με τη σημαία / mode: ViewGeneration. Μπορείτε επίσης να προπαραγάγετε προβολές με ένα πρώτο μοντέλο κώδικα.

Απενεργοποίηση αυτόματης ανίχνευσης αλλαγών

Όταν προσπαθείτε να ενημερώσετε τη βάση δεδομένων, το Entity Framework πρέπει να γνωρίζει τις αλλαγές που έχουν γίνει σε μια οντότητα από τη στιγμή που φορτώθηκε στη μνήμη. Αυτή η ανίχνευση αλλαγών γίνεται συγκρίνοντας τις παλιές τιμές των ιδιοτήτων με τις νέες ή τις αλλαγμένες τιμές όταν πραγματοποιείτε μια κλήση στις μεθόδους όπως, Εύρεση (), Κατάργηση (), Προσθήκη (), Επισύναψη () και Αποθήκευση αλλαγών (). Αυτή η ανίχνευση αλλαγών είναι πολύ δαπανηρή και μπορεί να υποβαθμίσει την απόδοση της εφαρμογής κυρίως όταν εργάζεστε με πολλές οντότητες. Μπορείτε να απενεργοποιήσετε την ανίχνευση αλλαγών χρησιμοποιώντας τον ακόλουθο κώδικα.

Όταν θέλετε να απενεργοποιήσετε τον εντοπισμό αλλαγών, είναι καλή πρακτική να το απενεργοποιήσετε μέσα σε ένα μπλοκ try / catch και, στη συνέχεια, να το ενεργοποιήσετε ξανά στο μπλοκ. Λάβετε υπόψη ότι μπορείτε να το αγνοήσετε όταν εργάζεστε με ένα σχετικά μικρό σύνολο δεδομένων - θα έχετε σημαντικά κέρδη απόδοσης απενεργοποιώντας τον εντοπισμό αλλαγών όταν εργάζεστε με ένα μεγάλο σύνολο δεδομένων.

Άλλα σημεία που πρέπει να θυμάστε

Χρησιμοποιήστε προβολές για να επιλέξετε μόνο τα πεδία που απαιτούνται κατά την ανάκτηση δεδομένων. Θα πρέπει να αποφύγετε την ανάκτηση πεδίων που δεν χρειάζονται.

Το παρακάτω απόσπασμα κώδικα δείχνει πώς μπορείτε να χρησιμοποιήσετε την ανάκτηση δεδομένων σε σελιδοποιημένο τρόπο - σημειώστε πώς χρησιμοποιήθηκε το ευρετήριο της αρχικής σελίδας και το μέγεθος της σελίδας για την επιλογή μόνο των δεδομένων που χρειάζονται.

int pageSize = 25, startPageIndex = 1;

NorthwindEntities dataContext = νέο NorthwindEntities ();

Λίστα lstCus = dataContext.tblCustomers.Take (pageSize)

. Παράλειψη (startPageIndex * pageSize)

.ToList ();

Θα πρέπει επίσης να επιλέξετε την κατάλληλη συλλογή και να χρησιμοποιήσετε μεταγλωττισμένα ερωτήματα για να βελτιώσετε την απόδοση των ερωτημάτων σας LINQ κατά την ανάκτηση δεδομένων που εκτίθενται από το EDM. Αποφύγετε να τραβήξετε όλα τα αντικείμενα της βάσης δεδομένων σε ένα μοντέλο δεδομένων οντοτήτων. Ανακτήστε μόνο τον αριθμό των εγγραφών που απαιτούνται και αποφύγετε τη χρήση του "Περιέχει" κατά τη χρήση του LINQ to Entities. Μπορείτε να χρησιμοποιήσετε τη σελιδοποίηση για να ανακτήσετε μόνο τα δεδομένα που ζητούνται ή να περιορίσετε την ποσότητα των δεδομένων που ανακτώνται από τη βάση δεδομένων. Επίσης, θα πρέπει να προσθέσετε ευρετήρια στις οντότητες σας πραγματοποιώντας μια κλήση στη μέθοδο CreateIndex ().

Μπορείτε να μάθετε περισσότερα σχετικά με τις εκτιμήσεις απόδοσης όταν χρησιμοποιείτε το Entity Framework από αυτόν τον σύνδεσμο.