שיטות עבודה מומלצות לשיפור ביצועי Entity Framework

מסגרת היישויות של מיקרוסופט היא ORM מורחב המסייע לך לבודד את מודל האובייקט של היישום שלך ממודל הנתונים. זוהי מסגרת ORM עם קוד פתוח עבור ADO.Net והיא כלולה כחלק מ- NET Framework. בפוסט זה אציג כמה טיפים שניתן לעקוב אחריהם כדי לייעל את ביצועי Entity Framework. בחלקים הבאים, הייתי בודק כמה טיפים שניתן לאמץ לשיפור ביצועי היישומים כאשר אתה עובד עם Entity Framework.

האם מודל נתוני הישות שלך מייצג יחידת עבודה אחת?

כשאתה יוצר את ה- EDM שלך (מודל נתוני הישויות) עליך לוודא שה- EDM מייצג יחידת עבודה אחת ולא את כל מסד הנתונים במיוחד כאשר יש לך אובייקטים רבים (טבלאות, נהלים מאוחסנים, תצוגות וכו ') שמנותקים או שאינם נחוצים ליחידת עבודה מסוימת. אם ה- EDM שלך מייצג את כל מסד הנתונים כשאין צורך בכך, הוא יכול לפגוע בביצועי היישום בגלל הצורך לטעון הרבה אובייקטים מיותרים בזיכרון. למעשה, עליך לפרק מודל נתוני ישות גדול לקטנים יותר כאשר כל מודל מייצג יחידת עבודה.

תוכל לעיין במאמר MSDN זה למידע נוסף על האופן שבו ניתן לשפר את ביצועי Entity Framework.

השבת מעקב אחר שינויים

עליך להשבית מעקב אחר שינויים אם אין צורך בכך. והכי חשוב, אינך זקוק למעקב אחר שינויים כאשר אתה רק רוצה לאחזר נתונים ועדכונים על הנתונים הנקראים אינם נחוצים כלל. באפשרותך להשתמש בהצהרה הבאה כדי להשבית מעקב אחר שינויים או לשמור במטמון את התוצאה של שאילתה כאשר ברצונך לאחזר לקוחות ממסד הנתונים ללא צורך בעדכון הרשומות.

אם ברצונך להשבית מעקב אחר אובייקטים לטבלת הלקוחות, תוכל להשתמש בקוד הבא.

PayrollContext context = new PayrollContext();

הפחת את עלות ייצור התצוגה באמצעות תצוגות שנוצרו מראש

יצירת ObjectContext היא פעולה יקרה מכיוון שהיא כוללת עלות טעינה ואימות של המטא נתונים. כדאי לנצל את התצוגות שנוצרו מראש כדי להפחית את זמן התגובה בעת ביצוע הבקשה הראשונה. בעיקרו של דבר, זמן הריצה של Entity Framework יוצר קבוצת מחלקות (נקראת גם התצוגה) כאשר הקשר האובייקט מופעל לראשונה. באפשרותך להקטין תקורה זו על ידי יצירת תצוגה מקדימה של קובץ EDMX באמצעות כלי שורת הפקודה EdmGen.exe או תבניות T4. שים לב שאם קבצי הסכימה של המודל השתנו, יהיה עליך ליצור מחדש את קובץ הצפיות על ידי הפעלת EdmGen.exe עם הדגל / mode: ViewGeneration. ניתן גם ליצור מראש תצוגות עם קוד מודל ראשון.

השבת איתור אוטומטי של שינויים

כאשר מנסים לעדכן את מסד הנתונים, מסגרת הישויות צריכה לדעת את השינויים שבוצעו בישות מרגע טעינה בזיכרון. זיהוי שינוי זה נעשה על ידי השוואת הערכים הישנים של המאפיינים עם הערכים החדשים או שהשתנו כשאתה מתקשר לשיטות כמו Find (), Remove (), Add (), Attach () ו- SaveChanges (). זיהוי שינוי זה הוא יקר מאוד ויכול לפגוע בביצועי היישום בעיקר כאשר אתה עובד עם ישויות רבות. ניתן להשבית איתור שינויים באמצעות הקוד הבא.

כאשר ברצונך להשבית איתור שינויים, נוהג להשבית אותו בתוך בלוק ניסיון / תפוס ואז להפעיל אותו מחדש בתוך החסימה הסופית. שים לב שאתה יכול להתעלם מכך כשאתה עובד עם מערכת נתונים קטנה יחסית - היית מקבל רווחי ביצועים משמעותיים על ידי כיבוי זיהוי השינויים כאשר אתה עובד עם מערכת נתונים גדולה.

נקודות אחרות שיש לזכור

השתמש בתחזיות כדי לבחור רק את השדות הדרושים בעת אחזור נתונים. כדאי להימנע מאחזור שדות שאינם נחוצים.

קטע הקוד הבא ממחיש כיצד ניתן להשתמש באחזור נתונים באופן עמוד - שימו לב כיצד נעשה שימוש באינדקס עמוד הפתיחה ובגודל העמוד לבחירת הנתונים הדרושים בלבד.

int pageSize = 25, startingPageIndex = 1;

NorthwindEntities dataContext = new NorthwindEntities();

List lstCus = dataContext.tblCustomers.Take(pageSize)

.Skip(startingPageIndex * pageSize)

.ToList();

עליך גם לבחור את האוסף המתאים ולהשתמש בשאילתות מקומרות כדי לשפר את הביצועים של שאילתות LINQ שלך בעת אחזור נתונים שנחשפו על ידי ה- EDM. הימנע משיכת כל אובייקטי מסד הנתונים במודל נתוני ישות אחד. אחזר רק את מספר הרשומות הדרושות והימנע משימוש "מכיל" בעת שימוש ב- LINQ לישויות. באפשרותך להשתמש בהחלפה כדי לאחזר רק את הנתונים המבוקשים או להגביל את כמות הנתונים שנשלפת ממסד הנתונים. כמו כן, עליך להוסיף אינדקסים ליישויות שלך על ידי ביצוע שיחה לשיטת CreateIndex ().

תוכל ללמוד עוד על שיקולי הביצועים בעת שימוש ב- Entity Framework מקישור זה.