none
關於for迴圈記憶體釋放的問題 RRS feed

  • 問題

  • 小弟我算是一個C#的新手,入坑不到2年,最近在寫一個Windows Form的應用程式,遇到一個問題,想請問有沒有前輩能指點一下幫助小弟解決問題

    我在用for進行對Form1中的flowLayoutPanel裡的flowLayoutPanel陣列裡面的PictureBox新增圖片

    不過會出現記憶體不足的資訊,部分程式如下,記憶體會快速上升到1GB左右,然後程式就掛掉了,出現例外狀況

    System.OutOfMemoryException' 類型的例外狀況發生於 System.Drawing.dll,但使用者程式碼未加以處理

    其他資訊: 記憶體不足。

    後來先取得縮圖再新增也差不多,不過就剛好到1G多然後新增完畢

    Google了一下,好像是因為for迴圈在使用時不會釋放記憶體

    新增完後記憶體使用會自動降回500M左右,滾輪滾動一下就會回到正常的40多M

    //新增預覽圖
                ArrayList MySub = new ArrayList(MyFilter.Split(','));
                for (int n = 0; n < flowLayoutPanel1.Controls.Count; n++)
                {
                    DirectoryInfo MyDi = new DirectoryInfo(MyFolderPath[n].ToString());
    
                    string MyImage = "";
                    int i = 0;
                    while (MyImage == "")
                    {
                        if (MyDi.GetFiles("*." + MySub[i]).Length != 0)
                        {
                            MyImage = MyDi.GetFiles("*." + MySub[i])[0].FullName.ToString();
                            break;
                        }
                        i++;
                    }
                    //Image MySmallPic;
                    //MySmallPic = Image.FromFile(MyImage).GetThumbnailImage(100, 100, null, IntPtr.Zero);
                    //((PictureBox)(flowLayoutPanel1.Controls[n].Controls[0])).Image = MySmallPic;
    
                    //直接顯示圖片(非縮圖)
                    ((PictureBox)(flowLayoutPanel1.Controls[n].Controls[0])).Image = Image.FromFile(MyImage);
                }

    2015年10月27日 下午 03:48

解答

所有回覆