PracticU

הבדלים בין Dispose
לבין Garbage Collector

בלי כתוביותעם כתוביות
PracticU › קורס Entity Framework Core - עבודה עם מסד נתונים בדוט-נט › הבדלים בין Dispose לבין Garbage Collector
מילון מושגים:
זיכרון - רכיב מהיר ונדיף שבו המחשב שומר נתונים ותוכניות בזמן ריצתם. תוכנו נמחק עם כיבוי המחשב.
.NET - פלטפורמת פיתוח של מיקרוסופט להרצת יישומים בשפות כמו C#, הכוללת ספריות וסביבת ריצה משותפות.
אובייקט - יחידה בתכנות מונחה עצמים שמאגדת נתונים (תכונות) ופעולות (מתודות). נוצר בדרך כלל ממחלקה המשמשת כתבנית.
בנאי - מתודה מיוחדת שמופעלת אוטומטית בעת יצירת אובייקט ממחלקה, ומאתחלת את ערכיו ההתחלתיים.
מחלקה - תבנית בתכנות מונחה עצמים שמגדירה אילו נתונים ופעולות יהיו לאובייקטים שנוצרים ממנה.
מסד נתונים - אוסף מאורגן של נתונים המאוחסן כך שאפשר לשמור, לחפש, לעדכן ולשלוף אותו ביעילות, לרוב באמצעות שפת שאילתות.
פורט - מספר שמזהה שירות או תהליך מסוים בתוך מחשב, ומאפשר לכוון תעבורת רשת ליעד הנכון. למשל פורט 80 ל-HTTP.

הבדלים בין Dispose לבין Garbage Collector
מתכנתים מתחילים נוטים לחשוב ששחרור משאבים פירושו שחרור זיכרון. ההרצאה מבהירה שמדובר בשני דברים שונים: Garbage Collector מטפל בזיכרון, ו-Dispose מטפל במשאבים אחרים.
ההבדל בין שני המנגנונים
1. Garbage Collector: ב-.NET יש מנגנון שמשחרר זיכרון של אובייקטים, ולכן אין צורך לדאוג לשחרור זיכרון. בשפות ישנות כמו C++ אין מנגנון כזה, והמתכנת חייב לשחרר בעצמו.
2. Dispose: תפקידה לשחרר משאבים לוגיים שהקוד השתמש בהם במהלך חיי האובייקט, ולא קשור לזיכרון של האובייקטים.
דוגמאות למשאבים לוגיים
- קובץ שנפתח בקונסטרקטור של מחלקה. בסיום העבודה צריך לסגור אותו, אחרת הוא נשאר תפוס.
- חיבור (connection) למסד נתונים, שרוצים לסגור בסיום העבודה עם האובייקט.
- קישור לאינטרנט.
- פורט, שהוא קישור פנימי של המחשב לכתובת.
בכל המקרים האלה האובייקט יוצר דברים שהוא צריך לעבוד איתם, וכשמסיימים לעבוד איתו רוצים לשחרר אותם. Dispose אחראית על כל המשאבים האלה.
אחרי ההרצאה אפשר להבחין בין זיכרון, שה-Garbage Collector מנקה, לבין משאבים כמו קבצים וחיבורים שאנחנו משחררים ב-Dispose.
השיעור הבא בקורס: הצגת פריט בודד SingleOrDefault

פרקי ההרצאה: הבדלים בין Dispose לבין Garbage Collector

  1. 00:00

    שחרור משאבים מול שחרור זיכרון

  2. 00:37

    Garbage Collector ושפות ללא GC

  3. 01:16

    Dispose לסגירת קבצים וחיבורים

  4. 01:53

    מתי משחררים משאבים

תמלול ההרצאה: הבדלים בין Dispose לבין Garbage Collector

הטקסט המלא של הדקות הראשונות בהרצאה «הבדלים בין Dispose לבין Garbage Collector» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.

  1. 00:02

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

  2. 00:13

    ואז הוא יכול לשאול את עצמו, למה אני צריך להתעסק עם dispose ושחרור זיכרון? הרי אין מנגנון במערכת שמשחרר לי זיכרון? פעם שמעתי, יש מנגנון שנקרא garbage collector.

  3. 00:26

    אכן יש מנגנון שנקרא garbagecollector שמשחרר זיכרון, אבל dispose לא קשור לשחרור אובייקטים בזיכרון.

  4. 00:36

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

  5. 00:58

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

  6. 01:27

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

  7. 01:40

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

  8. 01:52

    יש המון מקרים שאובייקט יוצר דברים שהוא צריך לעבוד איתם, לא קשור לגארבג' קולקטור ולא קשור לזיכרון של אובייקטים.

  9. 02:01

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

לקורס המלא: קורס Entity Framework Core

ההרצאה הקודמת: שחרור משאבים - using

ההרצאה הבאה: הצגת פריט בודד - SingleOrDefault

הרצאות קשורות מקורסים אחרים

  • Garbage Collector
  • הבדלים בין CC State לבין FC State
  • הבדלים בין Testing לבין Debugging
  • הבדלים בין Class לבין Object

קורסים נוספים במסלול

  • קורס דוט-נט - NET Core. - עם Rest API
  • קורס ASP.NET
  • קורס MVC
  • קורס Git ו-GitHub עם Visual Studio