[問題] 連續播圖片記憶體不足

看板C_Sharp作者 (小王子)時間14年前 (2010/05/13 21:06), 編輯推噓2(206)
留言8則, 6人參與, 最新討論串1/2 (看更多)
我是利用一個timer去連續播圖片 無限循環播放 如下: private void timer1_Tick(object sender, EventArgs e) { switch (n % 4) { case 0: pictureBox1.Image = System.Drawing.Image.FromHbitmap(Resource1.pitcher0.GetHbitmap()); n += 1; break; case 1: pictureBox1.Image = System.Drawing.Image.FromHbitmap(Resource1.pitcher3.GetHbitmap()); n += 1; break; case 2: pictureBox1.Image = System.Drawing.Image.FromHbitmap(Resource1.pitcher4.GetHbitmap()); n += 1; break; case 3: pictureBox1.Image = System.Drawing.Image.FromHbitmap(Resource1.pitcher5.GetHbitmap()); n = 0; break; } } 可是不知道為什麼 播一播就會crash 原因是記憶體不足 請問有什麼東西小弟沒有考慮到嗎 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.18.210

05/13 21:35, , 1F
在timer_tick()之外先存switch內的四個Bitmap物件
05/13 21:35, 1F

05/13 21:35, , 2F
你的寫法只會不斷new出新物件給pictureBox1.Image
05/13 21:35, 2F

05/13 21:36, , 3F
記憶體可能來不及釋放
05/13 21:36, 3F

05/13 23:19, , 4F
你在 function 最後呼叫 GC.Collect() 出來洗地板看看。
05/13 23:19, 4F

05/13 23:27, , 5F
舊的Image Dispose掉試試看
05/13 23:27, 5F

05/14 14:40, , 6F
樓上正解 要懂的回收記憶體
05/14 14:40, 6F

05/14 16:21, , 7F
Bitmap好像是屬於unmanage資源
05/14 16:21, 7F

05/16 06:11, , 8F
呼叫 GetHbitmap後,要使用 GDIDeleteObject 才行.
05/16 06:11, 8F
文章代碼(AID): #1Bw_bUqp (C_Sharp)
文章代碼(AID): #1Bw_bUqp (C_Sharp)