相关疑难解决方法(0)

c#GDI +,在循环中创建LinearGradientBrush(内存泄漏)

今天我遇到了一点困境.我创建了一个使用GDI +在表单上绘制的应用程序.绘图由计时器每秒触发.draw方法使用for循环遍历对象集合,如果它们处于某种状态,则绘制它们.

我想使用LinearGradientBrush绘制它们只是因为它看起来比简单的刷子好得多.看看下面的内容

            //minutes
        foreach (Led l in MinuteGrid.Leds)
        {
            LinearGradientBrush b = new LinearGradientBrush
                (l.LedRectangle, Color.GreenYellow, Color.Green, 110);

            if (l.IsLit)
                g.FillRectangle(b, l.LedRectangle);

            b.Dispose();
        }
Run Code Online (Sandbox Code Playgroud)

我正在为循环的每次迭代创建一个新的LinearGradientBrush(这让我困扰),但那是因为我必须这样做.我无法在循环外创建一个,因为它的构造函数集要求我设置只在循环中知道的参数.

我发现在LinearGradientBrush对象上使用dispose方法并不是那么可靠.如果我运行我的应用程序并在任务管理器中查看它,它的喷出内存.当我然后添加b = null行似乎有很大帮助,如下所示

            foreach (Led l in MinuteGrid.Leds)
        {
            LinearGradientBrush b = new LinearGradientBrush
                (l.LedRectangle, Color.GreenYellow, Color.Green, 110);

            if (l.IsLit)
                g.FillRectangle(b, l.LedRectangle);

            if (b != null)
            {
                b.Dispose();
                b = null;
            }
        }
Run Code Online (Sandbox Code Playgroud)

我只是想知道是否有更好的方法来使用LinearGradientBrushes?或者是否有更好的解决方案?

非常感谢

c# gdi+

1
推荐指数
1
解决办法
1738
查看次数

标签 统计

c# ×1

gdi+ ×1