C# System.OutOfMemoryException:内存不足(GDI)

C# System.OutOfMemoryException:内存不足(GDI),c#,winforms,C#,Winforms,在windows vista premium上安装我的程序后,我遇到以下异常 必须显示的视图包含以下控件:2个文本框、3个标签、一个按钮和链接按钮 System.OutOfMemoryException: Out of memory. at System.Drawing.Graphics.FromHdcInternal(IntPtr hdc) at System.Windows.Forms.PaintEventArgs.get_Graphics() at System.Wind

在windows vista premium上安装我的程序后,我遇到以下异常

必须显示的视图包含以下控件:2个文本框、3个标签、一个按钮和链接按钮

System.OutOfMemoryException: Out of memory.
   at System.Drawing.Graphics.FromHdcInternal(IntPtr hdc)
   at System.Windows.Forms.PaintEventArgs.get_Graphics()
   at System.Windows.Forms.Control.PaintException(PaintEventArgs e)
   at System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer, Boolean disposeEventArgs)
   at System.Windows.Forms.Control.OnPrint(PaintEventArgs e)
   at System.Windows.Forms.Control.WmPrintClient(Message& m)
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
   at System.Windows.Forms.ContainerControl.WndProc(Message& m)
   at System.Windows.Forms.Form.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

有人也有同样的问题?如何解决

您的应用程序是否使用自定义控件或您自己编写的控件?你能用一个非常简单的形式重新解释这个问题吗

这个

。。。而这个

。。。似乎是一个类似的问题。然而,他们通常谈论无法处理对象的自定义控件(以及泄漏GDI句柄)


您是否可能在应用程序中的其他地方泄漏了句柄?

您是否可能只在Vista设备上检测到此漏洞,因为可用内存少于Windows XP设备?如果机器的规格大致相同,那么我猜Vista框的可用内存会更少,因此会更快地突出内存泄漏问题


另一种可能是,您试图渲染的内容太多,因为调用堆栈声明有一个可滚动控件,您是否可能渲染了一堆实际上不可见的内容?

您多久显示一次此表单?这可能是窗口句柄的句柄问题(或缺少)

我曾经在包含数百个控件的对话框的项目中工作过,由于对话框在使用后未被处理,因此存在内存/句柄问题

为了解决这个问题,他们最初存储了表单第一次显示时表单上每个控件的句柄,并在每次显示后重新使用这些句柄


在我看来,在完成后立即销毁您不需要的内容更容易、更简单。

这不一定是OOM错误,GDI有一个习惯,每当抛出异常时就会抛出内存

引用微软的话,“GDI+喜欢在与内存无关的情况下返回OutOfMemoryException”。一个讨厌的小“怪癖”


有关详细信息,请参见

我正在使用Telerik RadGridView的其他表单,可以显示这些表单。除此之外,我使用的是.netI控件。我在win xp pro和business(没有问题)以及vista ultimate上安装该程序也没有问题。但是vista Premium->给了我一个错误,这个表单只在程序启动时显示一次,他们需要在进入实际程序之前输入登录名。我们重新启动了有问题的计算机,现在程序启动时没有该错误,我们可以在程序中工作。Microsoft关闭了连接站点,详细信息不再可用。