הקטנת הזיכרון

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

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

הפחתת נפח הזיכרון ב-Unity

בגלל העיצוב הארכיטקטוני של Unity, אחרי שהמנוע מרחיב את מקצי הבלוקים המקוריים ואת ה-heap המנוהל, הוא נוטה לשמור את דפי הזיכרון האלה לשימוש חוזר במקום להחזיר אותם מיד למערכת ההפעלה (OS), גם אחרי שמשחררים נכסים. באופן ספציפי, מרחב הכתובות הווירטואלי (הזיכרון השמור) נשאר שמור למשך חיי התהליך, והזיכרון הפיזי (RSS) לא משוחרר מיד עד שמתרחשים כמה מחזורים של מנגנון איסוף זבל (GC) ושל גיזום. לכן, שיא זמני בזיכרון יכול לגרום לזיכרון התושב להישאר מנופח למשך זמן רב גם אחרי שהשימוש בפועל יורד. התנהגות כזו מגדילה את הסיכון לקריסות בגלל חוסר זיכרון (OOM) במכשירים ברמת כניסה, ופוגעת ביציבות הכוללת של זמן הריצה.

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

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

מידע נוסף זמין במאמר בנושא אופטימיזציה של הזיכרון ב-Unity.