קוד C# שתופח במנהל המשימות
-
יש לי את הקוד הבא, ומשום מה הזכרון לא מתנקה בסוף כל מעבר על הלולאה, את זה אני רואה ממנהל המשימות שזה מתחיל מבייטים בודדים ותופח לכמה מגה. מה יכולה להיות הבעיה שהאובקטים לא מתנקים?
for (;;) { try { Thread.Sleep(45000); Bitmap b = new Bitmap(Screen.PrimaryScreen.WorkingArea.Width, Screen.PrimaryScreen.WorkingArea.Height); Graphics g = Graphics.FromImage(b); g.CopyFromScreen(Point.Empty, Point.Empty, Screen.PrimaryScreen.WorkingArea.Size); var d = DateTime.Now.Ticks.ToString(); b.Save(y + "\\" + d + ".jpg", ImageFormat.Jpeg); b.Dispose(); g.Dispose(); d = null; b.Dispose(); }
פורסם במקור בפורום CODE613 ב04/06/2017 14:13 (+03:00)
-
לצורך הפעולה שנראה שאתה עושה יש ספריות ועדיף שתשתמש איתם.
(אגב, הGDI שזה ספריית הגרפיקה הותיקה של דוטנט מאוד מועדת לבאגים).
C# זה שפה עילית בה יש למתכנת את החופש מלחשוב מה קורה עם הזיכרון כאשר אופי הקוד שלו הוא עם "צוארון לבן" ולא מתעסק עם עניינים שמחייבים התייחסות לחומרה. אם הוא כן מתעסק בזה, החופש נגמר וצריך לעבוד עם הזיכרון ע"י מצביעים.
אפשר להכריח את הזיכרון להתנקות אבל זה עלות ביצועים גבוהה.פורסם במקור בפורום CODE613 ב04/06/2017 18:54 (+03:00)