שחרור זכרון - קריאה לGC
-
אני טוען אינדקסים לזכרון בגודל של כמה מאות מגה, השאלה האם לאחר ביצוע החיפוש כדאי לשחרר את הזכרון בעצמי, או להשאיר את המלאכה לGC?
כרגע אני מציב במשתנה שלהם ערך null.
השאלה האם לא כדאי לקרוא לGC בעצמי? כי למיטב זכרוני אומרים שעדיף לא לקרוא לו בצורה ישירה, כי ככה זה הרבה פעמים רק מסבך את העסק..מאידך הרי תמיד שמשתמשים בדטה בייס יש את המתודה Dispose, לא?
קיצר, אשמח אם מישהו יוכל להחכימני בעניין זה.תודה רבה!
פורסם במקור בפורום CODE613 ב06/11/2016 15:45 (+02:00)
-
אתה שואל על נושאים מתקדמים אבל לא מספק מספיק אינפורמציה, קשה לענות על שאלה כזו.
יש לי תוכנה שמאפשרת חיפוש בספרים. (אתה יכול לראות אותה באתר הזה)
אני רוצה להוסיף אפשרות של חיפוש בכל הספרים, וזה אומר לטעון את כל האינדקסים שיחד הם שוקלים יותר מג'יגה.. לכן עד עכשיו לא אפשרתי את זה. אבל קיבלתי פניות מאנשים שרוצים את זה, אז השאלה שלי היא איך לעשות את זה בצורה הכי נכונה במצב הקיים, כי כרגע אני לא הולך לבנות אותה מחדש (למרות שזה מה שהיה ראוי לעשות, אך אין לי זמן..
מה שעשיתי עכשיו, זה לטעון את כל האינדקסים יחד לזכרון, להריץ חיפוש ובסיום החיפוש אני מציב במשתנה שמכיל אותם את הערך - Null. כדי שלא להכביד על הזכרון של המשתמש אם הוא לא יבצע עוד חיפושים.. אם כן, אז הוא יטען שוב, ושוב ישחרר..
זה קצת מסורבל, היה עדיף להשאיר את כולם בזכרון, כדי לשפר את הביצועים אם הוא יבצע כמה חיפושים רציפים.. אבל אני מעדיף שלא להכביד על הזכרון, כיון שאם הוא יבצע חיפוש בהכל - הוא יטען ג'יגה וחצי לזכרון הראם וחבל..השאלה שלי: שנראה לי שדוטנט לא משחרר את הזכרון בצורה מיידית לאחר שאני מציב בו את הערך null, שהרי אני רואה במנהל המשימות שהאפליקציה עדיין לא שיחררה את הזכרון הזה. אני יודע שיש דרך לקרוא לGC ע"י פונקציה אבל למיטב זכרוני ממליצים לא להשתמש בזה, כי זה רק יכול לסבך יותר את העסק.. כמו שגם הבנתי מתשובתו של דוד ל.ט.
חשבתי עכשיו על אפשרות נוספת, רק אני לא בטוח שהיא יותר יעילה, שבמקום לטעון את כל האינדקסים ואז להריץ חיפוש על הכל. אני יטען אינדקס אחד, יריץ עליו חיפוש, אח"כ לאותו משתנה יטען אינדקס נוסף ויחפש עליו וחוזר חלילה.. השאלה האם מבחינת הזכרון זה באמת יותר יעיל? או שלא באמת, שהרי אמנם כשאני טוען את האינדקס השני לאותו משתנה, הוא לא באמת משחרר את הזכרון של הראשון, אלא אני רק מאבד את המצביע אליו.. ובעצם זה כמו להציב בו null לבסוף. או שכן?
תודה מראש!פורסם במקור בפורום CODE613 ב07/11/2016 08:28 (+02:00)
-
@דוד ל.ט.
רק שים לב שאינך משאיר שום הפניה חיה בשום מקום לאובייקט "מיותר".יש דרך מקצועית לבדוק את זה, או רק "לשים לב"?
הדרך הכי מקצועית זה "לשים לב" - לכתוב נכון ולתכנן נכון כל אובייקט מה אורך חייו מי תלוי בו ומי לא.
אם אתה נזקק לכלים אוטומטיים כדי לאתר כזה דבר, אתה בצרה הרבה יותר גדולה מאשר בעיית הזיכרון.פורסם במקור בפורום CODE613 ב07/11/2016 09:22 (+02:00)