位图和图片框导致内存不足异常

本文关键字:内存不足 异常 位图 | 更新日期: 2023-09-27 18:11:31

我正在尝试创建一个应用程序,显示picturebox中的在线列车。

但是我的应用程序花费了很多内存,有时我得到了Out of memory exception,有时我从picturebox列车Disappears。为了第一次绘制在线火车,我在picturebox上绘制火车(线路,车站,…)的地图,大小为x=Ay=b,之后我创建了另一个picturebox,大小相同,并使用以下代码将第二个picturebox放在第一个picturebox上:

    pictureBoxonlineTrain.Parent = pictureBoxMetroMap;
In every second the below function is executed :
       public void DrawOnlineTrain()
            {
                Bitmap map=null;
                if (OnlineTrainList.Count > 0)
                {
                    map = new Bitmap(pictureBoxonlineTrain.Size.Width, pictureBoxonlineTrain.Size.Height);
                    var graph = Graphics.FromImage(map);
                    foreach (TimeTable t in OnlineTrainList.ToList())
                    {
                       // graph.Dispose();
                        Rectangle rectTrainState = new Rectangle(t.XTrainLocation.Value - 3,
                                                                 t.YTrainLocation.Value - 3,
                                                                 15, 15);
                        graph.FillRectangle(RedBrush, rectTrainState);
                        graph.DrawString(t.TrainId.ToString(), pictureBoxonlineTrain.Font, Brushes.White, t.XTrainLocation.Value  -3, t.YTrainLocation.Value -3);
                    }
                }
                pictureBoxonlineTrain.Image = map;
              //  pictureBoxonlineTrain.Image.Save(@"C:'RailwayShiraz'ShirazMetro'ShirazRailWayWeb'Images'Train.jpg");
            } 

我认为这是我的内存异常的原因,因为每次我创建一个bitmapgraphic对象。我的问题是我怎么能改变这个代码作为对象处置在每个循环?

位图和图片框导致内存不足异常

将位图和图形放入Using语句中,它将被处理

using (map = new Bitmap(pictureBoxonlineTrain.Size.Width, pictureBoxonlineTrain.Size.Height))
{
    using (Graphics graph = Graphics.FromImage(map))
    {
//code goes here
    }
}