在開發UWP應用程序時,我最近發現了不少內存泄漏,阻止了我的頁面被GC收集。 我有一個ContentPresenter我的網頁像:UWP編譯綁定x:綁定產生內存泄漏
<ContentControl Grid.Column="0" Grid.Row="1" Content="{x:Bind ViewModel.Schedule, Mode=OneWay}">
</ContentControl>
之後,我刪除內容或動態{結合}取代它 - 當我從它導航頁面被收集。否則它仍然在內存中。 它是錯誤還是我做錯了什麼?有沒有辦法釋放和清除所有綁定從導航?
UPDATE: 這似乎是微軟內部的一個已知的問題,指出here。 但是,就我所見,通過我自己的測試/應用程序使用情況,由x:Bind保留的數據仍會在一段時間後收集,例如,當您導航到相同的頁面或爲某些創建相同的控件時時間。我可以看到創建了新的對象,但在某個時間點收集了舊對象。
因此,對我來說,它似乎不是一個引起內存不足的嚴重問題,它只是不允許對象像動態綁定一樣快速收集。
@ O.O謝謝你的回答!我只應該糾正,對於編譯綁定默認模式是OneTime,所以我必須在這種情況下指定OneWay。 [鏈接](https://msdn.microsoft.com/en-us/library/windows/apps/mt204783.aspx)到文檔 – Viachslau
@OO關於內存泄漏我在profiler中看到了以下行爲:如果我有動態綁定 - 在我從頁面導航後,每個快照上都會收集對象。使用編譯綁定 - 他們不是,但是在某個時刻DO收集,而其中一些仍然保留。 – Viachslau
感謝您的糾正。我在我的應用程序中遇到了同樣的問題,但是使用動態綁定並且無法隔離問題,除非我注意到來回導航會加劇此問題。您可以嘗試使用OnNavigatedTo/From事件清除datacontext和數據綁定和導航堆棧。如果它在您的方案中起作用,您也可以啓用頁面緩存。 –