2017-02-20 107 views
1

我有一个包含Datagrid的WPF窗口。 窗口以全屏方式启动并填充数据网格。 然后我恢复窗口,突然过程开始需要内存,直到它崩溃。 在调整大小之前和之后拍摄内存快照时,我发现数量越来越多的DataGridCellItemAutomationPeer和DataGridItemAutomationPeer类型的对象需要内存。调整窗口大小会导致内存不足datagridcellitemautomationpeer

User Gdir指出我已经报告过类似问题(WPF System.OutOfMemoryException System.Windows.Automation.Peers.AutomationPeer.UpdateSubtree),但似乎并非如此。

奇怪的是,它似乎只发生在一些机器上,而我至少有一台机器上没有出现问题。

更深的挖掘,它看起来像法

protected override System.Windows.Automation.Peers.AutomationPeer OnCreateAutomationPeer() 

只调用某些机器上。 触发该方法调用的判别式是什么?

任何暗示指导我解决问题?

谢谢!

+0

您在2015年9月报告了一个[类似问题](http://stackoverflow.com/questions/32483711/wpf-system-outofmemoryexception-system-windows-automation-peers-automationpeer-u)。那是相关的吗? – gdir

+0

谢谢!我忘了那篇文章是我的。无论如何,这似乎不是一回事。我更新我的问题以添加更多详细信息。 –

回答

0

(这只是一个局部的答案)

事实证明,获取DataGrid的源代码,并从所有数据网格相关的类去除方法

protected override System.Windows.Automation.Peers.AutomationPeer OnCreateAutomationPeer() 

,问题消失。 可疑是类DataGridAutomationPeer中的某些错误在某些特定情况下会生成无限循环。

仍然不清楚为什么OnCreateAutomationPeer被调用,为什么这个问题只发生在某些机器上。