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

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

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

בנושא אופטמיזציה בניצול משאבים

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

    יש לי כמה שאלות בנושא, הנה הראשונה:
    אם יש לי מערך:

    Dim arr(1000000) As String
    For i = 0 To 1000000
        arr(i) = i.ToString
    Next
    arr = Nothing
    

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

    פורסם במקור בפורום CODE613 ב04/04/2014 12:02 (+03:00)

    תגובה 1 תגובה אחרונה
    0
    • M מנותק
      M מנותק
      macroshadow
      כתב ב נערך לאחרונה על ידי
      #2

      הוא לא מוחק את המערך, רק את המשתנה המפנה אליו. למחיקת המערך השתמש ב

      Array.Clear
      

      פורסם במקור בפורום CODE613 ב04/04/2014 17:14 (+03:00)

      תגובה 1 תגובה אחרונה
      0
      • רחמיםר מנותק
        רחמיםר מנותק
        רחמים מורחק
        כתב ב נערך לאחרונה על ידי
        #3

        מעניין, עשיתי כך:

         Array.Clear(arr, 0, arr.Length)
        

        אבל ערכת העבודה במנהל המשימות לא ירדה.

        פורסם במקור בפורום CODE613 ב04/04/2014 17:40 (+03:00)

        תגובה 1 תגובה אחרונה
        0
        • dovidD מנותק
          dovidD מנותק
          dovid ניהול
          כתב ב נערך לאחרונה על ידי
          #4

          הClear לא עשוי בדוט נט לניקיון אלא פשוט להחזיר את כל ערכי המערך למצבם התחילתי.
          בעיקרון מבחינת המתכנת צריך לדאוג שאין רפרנסים חיים לאובייקטים מיותרים.
          לדוגמה אם יש אובייקט ענק ושדה שלו בשימוש איזה אירוע זה מונע הריסה של האובייקט, זה תחום אחירות המתכנת. כל השאר זה דאגה של ה"אוסף הזבל" של דוט נט.
          אבל במידה והמשתנה הוא בסקופ של פונקציה לדוגמה, אין צורך אפי' לאפס אותו, סוף התחום שלו הרוס אותו וממילא המידע שלו "יתום" וככזה הGC - "אספן הזבל" מוחק אותו [u:3n26xzb3]מתי שהוא[/u:3n26xzb3].
          בתכלס תוכל לראות שאם תעמיס אלפי מגה, מידי פעם תהיה "מחיקה" מסיבית, משא"כ במגה בודדים (מתחת למה שהוקצה לתוכנית מלתכחילה) מסיבות חיסכון בביצועים כנראה הGC לא עושה כלום.
          אפשר לאלץ את הGC לאסוף ככה: GC.Collect, אני חושב שזה לא מומלץ ולא יודע למה זה משמש, תוכל לראות שזה עשוה את העבודה באמת בצורה דרמטית מבחינת הזיכרון.

          באובייקטים שיש שימוש במשאבים חיצוניים, שלא תחת ניהול הדוט נט, יש צורך בטיפול בסגירת העסק, ובד"כ הם מממשים את IDisosabe ויש לקורא למתודה המתאימה או לעטוף עם Using.

          פורסם במקור בפורום CODE613 ב06/04/2014 14:13 (+03:00)

          מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

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

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

          בא תתחבר לדף היומי!
          • התחברות

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

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