איפוס אובייקטים בקוד VBA
-
שלום וברכה
אשמח לשמוע מהמבינים ( @OdedDvir ושאר החברים)
מדוע חשוב לי לאפס אובייקטים בסיום הקוד
אני רואה שבקודים מוסמכים תמיד מופיע בסיום הקוד איפוס האובייקטים שנפתחו על ידי Nothing
אני מבין שהאיפוס הזה מפנה את המקום בזיכרון,
אמנם בלאו הכי עם סיום הריצה הזיכרון משתחרר, אם כן, למה קריטי לעשות את זה במפורש
האם כל הצורך הוא רק בשביל לפנות מקום תוך כדי הריצה עצמה, או שיש בזה עוד טעמים נסתרים?תודה מראש
-
-
@מומחה-באקסס הפעולה האמורה היא לאו דווקא איפוס אובייקטים, אלא המונח הנכון יותר הוא: שחרור אובייקטים. כלומר הודעה למערכת שהאובייקט כבר אינו בשימוש ויש לשחרר את הזיכרון שהוקצה לו.
יש שפות שבהן יש מנגנון מובנה שאמור לזהות אובייקטים שאינן בשימוש ולשחרר אותן אוטומטית. מנגנון זה נקרא בשם המכובד: "איסוף זבל" (Garbage Collection) ויש עליו חומר רב ברשת.
על קצה המזלג, אפשר לחלק את המנגנון לשני חלקים:
-
בסגירת התוכנית - שפות רבות מבצעות איסוף זבל בסיום הריצה, ומשחררות את כל הזיכרון שהוקצה לתהליך. וכן מערכת ההפעלה בעצמה דואגת לבצע זאת.
-
בזמן הריצה - כאן זה תלוי מאוד בשפה, יש שפות שמבצעות זאת אוטומטית (מבלי שתהיה לך איזו שליטה או ידיעה על כך כמעט) ויש שפות שמטילות עליך את האחריות המלאה לדאוג לכך.
על פי רוב, בסיום מקטע Scope (בVBA כשתגיע למילה End) האובייקט אמור להתנדף.
ל-VBA קיים מנגנון איסוף זבל אוטומטי סביר בזמן ריצה, אך כמו כל דבר בעולם - הוא לא מושלם. ובתוכנות מורכבות מבחינת קוד, אתה עלול להגיע למצבים של זליגת זיכרון.
למשל, אובייקט שהוגדר בתוך מקטע Scope לא ישוחרר מהזיכרון בסיום ה Scope אם קיים אליו איזה שהוא מצביע אחר.אולי בהמשך אדגים זאת על ידי קוד.
-