我的代码有以下形式:
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);
所以,我的问题是,为什么没有渲染/清除图形上下文泄漏内存?或者还有什么在这里发挥作用?
答案 0 :(得分:0)
不要使用application.doEvents!使用调度程序在不同的线程上运行时更新UI,它将阻止阻止UI和更改不会泄漏内存