• דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

איפוס אובייקטים בקוד VBA

מתוזמן נעוץ נעול הועבר תכנות
3 פוסטים 3 כותבים 90 צפיות
    • מהישן לחדש
    • מהחדש לישן
    • הכי הרבה הצבעות
תגובה
  • תגובה כנושא
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • מומחה באקססמ מנותק
    מומחה באקססמ מנותק
    מומחה באקסס
    כתב ב נערך לאחרונה על ידי מומחה באקסס
    #1

    שלום וברכה
    אשמח לשמוע מהמבינים ( @OdedDvir ושאר החברים)
    מדוע חשוב לי לאפס אובייקטים בסיום הקוד
    אני רואה שבקודים מוסמכים תמיד מופיע בסיום הקוד איפוס האובייקטים שנפתחו על ידי Nothing
    אני מבין שהאיפוס הזה מפנה את המקום בזיכרון,
    אמנם בלאו הכי עם סיום הריצה הזיכרון משתחרר, אם כן, למה קריטי לעשות את זה במפורש
    האם כל הצורך הוא רק בשביל לפנות מקום תוך כדי הריצה עצמה, או שיש בזה עוד טעמים נסתרים?

    תודה מראש

    dovidD OdedDvirO 2 תגובות תגובה אחרונה
    0
  • dovidD מנותק
    dovidD מנותק
    dovid ניהול
    השיב למומחה באקסס ב נערך לאחרונה על ידי
    #2

    When should an Excel VBA variable be killed or set to Nothing?

    אפשר ליצור קשר dovid@tchumim.com

    תגובה 1 תגובה אחרונה
    2
  • OdedDvirO מנותק
    OdedDvirO מנותק
    OdedDvir
    השיב למומחה באקסס ב נערך לאחרונה על ידי
    #3

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

    יש שפות שבהן יש מנגנון מובנה שאמור לזהות אובייקטים שאינן בשימוש ולשחרר אותן אוטומטית. מנגנון זה נקרא בשם המכובד: "איסוף זבל" (Garbage Collection) ויש עליו חומר רב ברשת.

    על קצה המזלג, אפשר לחלק את המנגנון לשני חלקים:

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

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

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

    אולי בהמשך אדגים זאת על ידי קוד.

    תגובה 1 תגובה אחרונה
    5

  • התחברות

  • אין לך חשבון עדיין? הרשמה

  • התחברו או הירשמו כדי לחפש.
  • פוסט ראשון
    פוסט אחרון
0
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
  • התחברות

  • אין לך חשבון עדיין? הרשמה

  • התחברו או הירשמו כדי לחפש.