首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

GDI+绘图 内存不足有关问题,

2012-01-22 
GDI+绘图 内存不足问题,在线等....下面函数运行2分钟后发生内存不足错误,使用了using 和disposed()都无效,

GDI+绘图 内存不足问题,在线等....
下面函数运行2分钟后发生内存不足错误,使用了using 和disposed()都无效,请高手帮忙!!!!
 private void timer1_Tick(object sender, EventArgs e)
  {
  Graphics g = this.CreateGraphics();
  Image gt = Image.FromFile("d:\\1.bmp");
  Point cc = new Point(100, 100);
  Point dd = new Point(300, 300);
  g.DrawImage(gt, 265, 211, 290, 210);
  gt.Dispose();
  g.Dispose();
  }

[解决办法]
我用楼主的代码测试了一下,每10毫秒就显示一张图片,内存最大时是200多兆,然后程序会自动释放内存,没有出现内存不足的情况啊。测试文件夹里的图片差不多是200张
测试代码:

C# code
public partial class Form2 : Form    {        ArrayList filer = new ArrayList();               int sss = 0;        public Form2()        {            InitializeComponent();        }        using S
[解决办法]
原来是 图片太大。 呵呵。

其实,即使你用了dispose。 垃圾回收也不是马上就回收的。

所以,当你的刷新频率太快,如果图片本身也比较大。那在垃圾回收之前就内存不足就很正常了。

如果,在每次代码的最后,加上GC。collect();强制回收。不知道能不能行。因为看资料写的是强制回收会影响程序性能。何况你这刷新频率这么高!

一个是导致cpu高负载,一个内存高使用量。 楼主自己测下吧。
[解决办法]
从文件读出的Image,需要先画到另一个Image中然后Dispose。参考代码:
C# code
Image gt = Image.FromFile(fd.FileName);using (Image tmpImag = new Bitmap(gt.Width, gt.Height)){    using (Graphics tmpG = Graphics.FromImage(tmpImag))    {        tmpG.DrawImage(gt, 0, 0, gt.Width, gt.Height);    }    using (Graphics g = this.CreateGraphics())    {        g.DrawImage(gt, 0, 0, this.Size.Width, this.Size.Height);    }}gt.Dispose(); 

热点排行