gpt4 book ai didi

.net - System.Drawing.Graphics.FromHdcInternal 内存不足异常但没有内存泄漏

转载 作者:行者123 更新时间:2023-12-04 20:55:33 24 4
gpt4 key购买 nike

我偶尔会遇到以下跟踪崩溃:

System.OutOfMemoryException: Out of memory.
at System.Drawing.Graphics.FromHdcInternal(IntPtr hdc)
at System.Windows.Forms.PaintEventArgs.get_Graphics()
at System.Windows.Forms.Control.PaintBackColor(PaintEventArgs e, Rectangle rectangle, Color backColor)
at System.Windows.Forms.Control.PaintBackground(PaintEventArgs e, Rectangle rectangle, Color backColor, Point scrollOffset)
at System.Windows.Forms.Control.PaintBackground(PaintEventArgs e, Rectangle rectangle)
at System.Windows.Forms.Control.OnPaintBackground(PaintEventArgs pevent)
at System.Windows.Forms.ScrollableControl.OnPaintBackground(PaintEventArgs e)
at System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer, Boolean disposeEventArgs)
at System.Windows.Forms.Control.WmEraseBkgnd(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.UserControl.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)

如您所见,跟踪中没有我的代码,因此我发现很难找到原因。谷歌搜索似乎没有定论,但通常指向某处的 GC 句柄泄漏,但在最近的崩溃之后,我的内存使用情况是:
Handle count:16,283, 
Private Bytes:995,440K,
Virtual Bytes:1,628,208K,
Working Set:866,892K,
GC Heap Size:158,841K,
GDI Objects:402,
User Objects:1,607

这似乎并不异常。此外,我经常使用 .net 内存分析器来管理泄漏。

不幸的是,我的应用程序很大,有很多窗口,所以我的第一个问题是:如何确定哪个窗口引起了所有的痛苦?

然后当然我的第二个问题是:如果没有句柄泄漏,是什么导致了异常!?

编辑:

对不起,我不能发布任何代码:它是一个庞大的代码库,异常并没有给我任何关于哪个部分可能是问题的线索。

我读到关于句柄有 10,000 个限制,但这个应用程序历来在 15,000 的情况下运行良好,所以我认为限制是其他东西:GDI 句柄或用户对象?

只是为了确保,我检查了句柄并没有泄漏,因为它们都是在启动时分配的,并且不会随着使用而增加。

让我修改我的问题:根据这些信息,下一步应该采取什么行动?我安装了进程资源管理器,并成功地从其中一次崩溃中获得了完整的内存转储,但确实没有使用任何一种来诊断此类问题的经验(直到现在 .net 内存分析器已经足够了)

最佳答案

您可能正在分配 Brushes 或 Pens 并且没有处理它们 - 这会消耗 GDI 句柄,并且在某些时候,所有这些句柄都被使用,并且您会收到 OutOfMemoryException。

关于.net - System.Drawing.Graphics.FromHdcInternal 内存不足异常但没有内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5166140/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com