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

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

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. איפוס אובייקטים בקוד VBA

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

מתוזמן נעוץ נעול הועבר תכנות
3 פוסטים 3 כותבים 127 צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • מומחה באקססמ מנותק
    מומחה באקססמ מנותק
    מומחה באקסס
    כתב ב נערך לאחרונה על ידי מומחה באקסס
    #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
        • דף הבית
        • קטגוריות
        • פוסטים אחרונים
        • משתמשים
        • חיפוש
        • חוקי הפורום