C#BufferedGraphics内存泄漏

时间:2014-09-08 14:31:11

标签: c# memory-leaks gdi

我的代码有以下形式:

while (Globals.Running)
{
    if ((Form.Visible == false) || (Form.ContainsFocus == false) || (Form.Enabled == false))
    {
        Threading.Thread.Sleep(100);
    }
    else
    {
        Update();
        Draw();
    }

    Application.DoEvents();
}

当我查看任务管理器中的进程时,我发现消耗的内存每秒增加8K。

如果我注释掉Draw()来电,内存就会稳定下来。因此,内存在Draw内泄漏。以下是该方法的样子:

private static void Draw()
{
    BufferedGraphics.Graphics.Clear(Color.CornflowerBlue);
    //Engine.Draw(BufferedGraphics.Graphics);
    BufferedGraphics.Render();
    ++FPS;
}

所以,即使没有我画任何东西,记忆也会丢失。如果我评论.Clear行,它仍然会泄漏。如果我评论.Render行,它仍然会泄漏。如果我注释掉这两个,它就会停止泄漏。

BufferedGraphics在构造函数中初始化,如下所示:

BufferedGraphics = BufferedGraphicsContext.Allocate(Graphics.FromHwnd(Form.Handle), Form.ClientRectangle);

所以,我的问题是,为什么没有渲染/清除图形上下文泄漏内存?或者还有什么在这里发挥作用?

1 个答案:

答案 0 :(得分:0)

不要使用application.doEvents!使用调度程序在不同的线程上运行时更新UI,它将阻止阻止UI和更改不会泄漏内存

实施例: Dispatcher.Invoke to update UI Control