内存不足26 C#

时间:2017-03-31 19:52:00

标签: c# winforms memory-leaks drawing

我有一个绘制函数,它绘制从一端到另一端的渐变线。我每次只画四十行左右。每一次,我都会生成一组新的线性渐变画笔。旧集是一个局部变量,与任何对象无关。我的程序只使用大约26 MB的内存。它可以正常工作几分钟,然后在分配新的线性渐变画笔时随机抛出一个内存不足异常。如您所见,发生异常时内存为25.7 MB。

最小示例代码(将抛出内存异常):

注意:以下代码仅在图形上下文的重绘中使用该异常时才会触发异常,该上下文会调整大小,即便如此,仅在几分钟后才会触发异常。

class DrawImpl
{
    private static Pen routePen = new Pen(Color.Black);
    public static void Draw(Graphics g, Point[] ps)
    {
        g.SmoothingMode = SmoothingMode.HighQuality;            
        if (ps != null && ps.Length > 0)
        {
            for (int i = 0; i < ps.Length; ++i)
            {
                int prevI = (((i - 1) % ps.Length) + ps.Length) % ps.Length;
                using (LinearGradientBrush routeBrush = new LinearGradientBrush(ps[prevI], ps[i], Color.Red, Color.Blue))
                {
                    routePen.Brush = routeBrush;
                    g.DrawLine(routePen, ps[prevI], ps[i]);
                }
            }
            GC.Collect();
        }
    }
}

1 个答案:

答案 0 :(得分:0)

不幸的是,即使错误与内存无关,require "bundler/setup"也会抛出System.Drawing异常。

我看到人们在以下情况下遇到异常: *使用LinearGradientBrush填充尺寸为0的矩形 *尝试加载损坏的图像文件

这些例外来自GDI +所以我建议寻找内部异常和日志。