我有一个绘制函数,它绘制从一端到另一端的渐变线。我每次只画四十行左右。每一次,我都会生成一组新的线性渐变画笔。旧集是一个局部变量,与任何对象无关。我的程序只使用大约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();
}
}
}
答案 0 :(得分:0)
不幸的是,即使错误与内存无关,require "bundler/setup"
也会抛出System.Drawing
异常。
我看到人们在以下情况下遇到异常: *使用LinearGradientBrush填充尺寸为0的矩形 *尝试加载损坏的图像文件
这些例外来自GDI +所以我建议寻找内部异常和日志。