gpt4 book ai didi

.net - 此异常消息 : Not enough quota is available to process this command 中引用的是什么 'quota'

转载 作者:可可西里 更新时间:2023-11-01 12:17:37 30 4
gpt4 key购买 nike

我有一个抛出以下异常的 .NET 应用程序:

System.ComponentModel.Win32Exception : Not enough quota is available to process this command 
at MS.Win32.UnsafeNativeMethods.PostMessage(HandleRef hwnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at MS.Win32.ManagedWndProcTracker.HookUpDefWindowProc(IntPtr hwnd)
at MS.Win32.ManagedWndProcTracker.OnAppDomainProcessExit()
at MS.Win32.ManagedWndProcTracker.ManagedWndProcTrackerShutDownListener.OnShutDown(Object target)
at MS.Internal.ShutDownListener.HandleShutDown(Object sender, EventArgs e)

我个人无法重现此异常,但我收到了很多来自用户的异常报告。

“配额”指的是什么?堆栈跟踪让我相信这可能是 Windows 消息队列的问题。

对于可能导致此错误的原因或如何修复它的任何想法,我们将不胜感激。

编辑,更多信息:这是在所有机器上的 32 位 Windows XP 上,异常不在我的代码中,而是一个 .NET Framework 事件某种处理程序。应用程序本身不进行任何 PostMessage 调用。

最佳答案

进程可以分配的特定类型的 Windows 资源量在技术上仅受进程可用的虚拟内存量的限制。这可能是一个相当大的数字,尤其是在 64 位版本的 Windows 上。其中一些资源从内部堆中撤回,所有其他进程也从中撤回。如果 Windows 让 一个 进程全部消耗它,这仍然是一个非常大的数字。

这当然没有意义,绝不允许进程吞噬所有可用资源。这就是配额的作用,它为某种类型的资源计数设置了上限。常见的例子是 10,000 个窗口、10,000 个 GDI 对象、10,000 个句柄。顺便说一句,并非所有这些都是很好的整数。

需要更多地了解您的 PostMessage() 调用的作用,但合理的猜测是它正在插入消息队列大小超过配额。同样,从技术上讲,资源仅限于可用虚拟内存的大小。但实际上应该保持在南边。如果准确,则您发布消息的速度快于它们被消耗的速度,需要进行限制。这发生在您的程序终止的确切时间表明可能需要另一种解释。可能是线程关闭顺序问题。

关于.net - 此异常消息 : Not enough quota is available to process this command 中引用的是什么 'quota',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5032258/

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