2017-02-20 106 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被調用,爲什麼這個問題只發生在某些機器上。