【发布时间】:2017-01-18 03:11:04
【问题描述】:
我们已经开始体验Not enough storage available to process this command。该应用程序是WPF,正常工作几个小时后开始弹出异常。
System.ComponentModel.Win32Exception (0x80004005): Not enough storage is available to process this command
at MS.Win32.UnsafeNativeMethods.RegisterClassEx(WNDCLASSEX_D wc_d)
at MS.Win32.HwndWrapper..ctor(Int32 classStyle, Int32 style, Int32 exStyle, Int32 x, Int32 y, Int32 width, Int32 height, String name, IntPtr parent, HwndWrapperHook[] hooks)
at System.Windows.Interop.HwndSource.Initialize(HwndSourceParameters parameters)
at System.Windows.Window.CreateSourceWindow(Boolean duringShow)
at System.Windows.Window.CreateSourceWindowDuringShow()
at System.Windows.Window.SafeCreateWindowDuringShow()
at System.Windows.Window.ShowHelper(Object booleanBox)
at System.Windows.Window.Show()
at System.Windows.Window.ShowDialog()
我的理解是这是某种内存不足异常,特定于windows resources 的分配。这可能是什么原因,我该如何调试?
更新
我已经查看了@Thili77 (this one) 建议的主题。我使用 GDIView 和任务管理器来查看我们的应用程序执行期间消耗的句柄(taskmgr 中的句柄、用户对象和 GDI 对象),它们看起来并没有增长。我的下一个测试是尝试在没有 VS 的情况下运行一天(之前它在 VS 主机进程下运行)并检查是否仍然发生这种情况。如果有人有任何建议或提示,我仍在寻找任何建议或提示
更新 #2
它发生在没有托管 VS 的新的干净 PC 上。句柄、用户对象和 GDI 对象在崩溃期间正常。当 PC 处于崩溃状态时,无法正常工作 - 看起来句柄确实泄漏了,但 ProcMon 没有显示这些值的大数字。 奇怪的是,这总是发生在晚上 7 点到 8 点左右,那时办公室里没有人,我什么时候开始运行应用程序也没关系。这已经是第三次这样的崩溃了。巧合?我唯一注意到我觉得奇怪的是应用程序的大量页面错误,并且不断增长。这可能是相关的吗?不再出现,请参阅更新 #3
更新 #3
接下来是我遇到的崩溃的详细信息。系统是x86,app是x86,W7 SP1。
屏幕截图中显示的当前状态正好在崩溃之后,windbg 暂停了进程。
由于某种原因,现在异常有不同的消息:The operation completed successfully。但它仍然是来自同一段代码的相同 Win32Exception。
我还需要确定我正在运行的桌面堆数量减少并且 AppAnalyzer Basic 选项处于打开状态 - 以使故障更加频繁(这似乎有效)。时间假设确实是一个巧合,不再注意到与时间相关的共享主题。
【问题讨论】:
-
在投反对票之前有人愿意表达自己吗?
-
This 会帮助你。
-
@Thili77 谢谢。不知怎的,我忽略了这个话题
-
既然你提到了一天中的特定时间,这是一个特殊的公司网络,将组策略推送到所有 PC? “新的干净 PC”是同一网络的一部分,还是发生在独立的 PC 上?
-
根据描述,内核内存池耗尽是最合乎逻辑的原因。不是您的程序必然引起的那种问题。谷歌“windows 诊断内核内存池耗尽”的相关命中。