【发布时间】:2017-04-02 01:04:46
【问题描述】:
我有一个绘图函数,它绘制从一端到另一端的渐变线。我每次只画大约四十条线。每次,我都会生成一组新的线性渐变画笔。旧集是一个与任何对象没有联系的局部变量。我的程序只使用了大约 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();
}
}
}
【问题讨论】:
-
我有 64 位的。
-
你能展示一下draw函数的代码吗?
-
你应该粘贴一些代码。在那之前我能做的就是同意你的调试器。
-
让我猜猜:你不是在刷子上调用
Dispose()还是使用using块? -
没错。我不知道我需要这样做。谢谢。我试试看。
标签: c# winforms memory-leaks drawing