
Dispose מטפל במשאבים אחרים.Dispose אחראית על כל המשאבים האלה.Dispose.הטקסט המלא של הדקות הראשונות בהרצאה «הבדלים בין Dispose לבין Garbage Collector» בקורס הווידאו של PracticU – כתוביות בעברית עם זמן התחלה לכל פסקה. כך תוכלו לקרוא ולחפש את הנושאים לפני שמתחילים ללמוד.
חשוב רק לציין הערה אחרונה לגבי כל הנושא של שחרור משאבים. כאשר מתכנת מתחיל שומע שחרור משאבים, הוא חושב שחרור זיכרון.
ואז הוא יכול לשאול את עצמו, למה אני צריך להתעסק עם dispose ושחרור זיכרון? הרי אין מנגנון במערכת שמשחרר לי זיכרון? פעם שמעתי, יש מנגנון שנקרא garbage collector.
אכן יש מנגנון שנקרא garbagecollector שמשחרר זיכרון, אבל dispose לא קשור לשחרור אובייקטים בזיכרון.
אם אתם בתור מתכנתים יוצרים אובייקט בזיכרון, אתם לא צריכים לדאוג בשביל לשחרר אותו מהזיכרון. יש שפות ישנות, כמו לדוגמה, אולי שמעתם על C++, ששם אין מנגנון garbage collector והמתכנת שיוצר אובייקט בזיכרון צריך גם לדאוג לזה שהאובייקט בסיום העבודה ישוחרר.
בדוטנט יש לנו garbage collector, אין לנו שום צורך להתעסק עם שחרור זיכרון. Dispose, התפקיד שלה זה לשחרר משאבים שלוגית אנחנו השתמשנו איתם בקוד. בוא נניח שאני יוצר מחלקה, פותח בתחילת האובייקט בקונסטרקטור קישור לקובץ, לא לדאטאבייס, סתם פותח קובץ, שסיימתי להשתמש במחלקה, אני רוצה לסגור את הקובץ, אחרת הקובץ יהיה תפוס על ידי.
ה-Dispose משחרר את אותו קובץ. כנ"ל אם אני פותח אובייקט ויוצר מיד איזשהו קונקשן לדאטאבייס בסיום העבודה עם האובייקט, אני רוצה בעצם לשחרר את הסגירה של הדאטאבייס.
ויש המון דוגמאות כאלה. פתחתי קישור באינטרנט, אני רוצה לסגור את הקישור לאינטרנט, פתחתי פורט שזה קישור פנימי למחשב, איזה כתובת למחשב, אני רוצה לסגור את אותו הפורט.
יש המון מקרים שאובייקט יוצר דברים שהוא צריך לעבוד איתם, לא קשור לגארבג' קולקטור ולא קשור לזיכרון של אובייקטים.
וברגע שאני מסיים לעבוד עם האובייקט, אני רוצה לשחרר אותם.