Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Memory leak in NavigationView even though I cleared the child page element while unloading. #5978

Open
prabakaran-sangameswaran opened this issue Sep 27, 2021 · 20 comments
Labels
area-NavigationView NavView control area-Performance bug Something isn't working product-winui3 WinUI 3 issues team-Controls Issue for the Controls team v0.8 Issues introduced in the Project Reunion 0.8 prerelease

Comments

@prabakaran-sangameswaran
Copy link

prabakaran-sangameswaran commented Sep 27, 2021

Discussion: Why memory leak occurs while displaying a custom code snippets view in a NavigationView's child page.

Describe the bug

While using the NavigationView control to navigate child pages, the child page's elements were cleared in its own unloading methods. But, the child pages retaining their memory after closing them.

Steps to reproduce the bug

  1. Open and build the sample App8.zip with x86 or x64 architecture.
  2. To take a memory leak report, click the Debug menu item and select the Performance Profiler in Visual studio.
  3. Select the Memory Usage check box and click Start button
  4. Visual studio will start the diagnostic session and launching the application
  5. Click the TakeScreenshot button in the Visual Studio diagnostic session.
  6. Click on the DemoList Navigation Menu Item in the application.
  7. Click on the Code Snippets1 grid view item and its opens a code snippets page
  8. Click on the Back app bar button
  9. Repeat steps 7 and 8 for CodeSnippets 2andCodeSnippets 3
  10. Click the Empty Page Navigation Menu Item.
  11. Wait for 2 min and click the Force GC in the Visual Studio diagnostic session.
  12. Click the TakeScreenshot button in the Visual Studio diagnostic session.
  13. Then, click the Stop Collection

ezgif com-gif-maker (9)

Memory leak report:

image

image

Expected behavior

Memory should be the same or low as the initial screenshot.

Version Info

NuGet package version: [WinUI 3 - Windows App SDK 0.8: 0.8.1]

Windows app type

WinRT

Windows version

October 2020 Update (19042)

Related Links

@prabakaran-sangameswaran prabakaran-sangameswaran added the discussion General discussion label Sep 27, 2021
@ghost ghost added the needs-triage Issue needs to be triaged by the area owners label Sep 27, 2021
@seven-mile
Copy link

I also inspected this issue several days ago, the mem usage and heap analysis was similar to yours.
My env is 22000 + experimental1. WinUI3 indeed has many performance problems to solve.

@StephenLPeters StephenLPeters added area-NavigationView NavView control product-winui3 WinUI 3 issues team-Controls Issue for the Controls team area-Performance v0.8 Issues introduced in the Project Reunion 0.8 prerelease and removed needs-triage Issue needs to be triaged by the area owners labels Sep 27, 2021
@dylech30th
Copy link

My case with this issue is more severe that what's inside the GridView is tons of Image each of which is bearing a BitmapImage as its source. And I found that the memory usage stays high even if I have cleared the item source of that GridView and confirmed multiple times that there are no other references to prevent the items from begin collected. I run both managed and native profiling several times and, initially, I thought this was a WinRT issue that the BitmapImage can't free up its resource correctly since the issue is immediately resolved once we changed the BitmapImage to SoftwareBitmap and handled the disposal of it manually.

@gaetandezeiraud
Copy link

On my side, I just use Navigate with WinUI 0.8.5 on a Frame. And memory grow every time Navigate is call. Don't know if I don't use correctly on my side. But clearly a memory leak.

Simple reproduction: https://discord.com/channels/372137812037730304/580484525075857428/902663747091460147

@prabakaran-sangameswaran
Copy link
Author

Hi Team,

Any update on this?

@bogdan-patraucean
Copy link

bogdan-patraucean commented Feb 20, 2022

I have the same problem with .NET 6 and Windows App SDK 1.0. The memory is not released after I leave a page, and when I come back it's increasing with the amount needed for the page. If the memory needed for that page is 50 MBs, each time I navigate back and forth, it keeps increasing with 50 MBs. The page constructor is never hit.

  • Tried NavigationCacheMode=Disabled and IsNagivationStackEnabled=False, same problem
  • Tried to implement IDisposable, but not even that is hit when I leave the page, same problem
  • Tried Bindinds.StopTracking() on Page Unload event, same problem
  • Tried GC.Collect() on Page Unload event, same problem

@wbokkers
Copy link

Even when NavigatioView is used with controls (and not with a Page), the memory used by these controls will not be released after closing the NavigationView. I tested with the NavigationView in its own UserControl. On 'navigation', I set the Visibility of UI elements in a to Visible and Collapsed. So no actual navigation occurs.
When I unload the NavigationView, the memory is not released.
I see users getting an out of memory exception quite often now that I use NavigationView in our app.

@Dimigergo
Copy link

Dimigergo commented Sep 5, 2022

Any update?
It's a serious bug, I think.

bdach added a commit to bdach/ToDoList that referenced this issue Sep 11, 2022
Unfortunately app still leaks memory, but it seems to be a WinUI 3
deficiency as there are other examples of this:

microsoft/microsoft-ui-xaml#5978
microsoft/CsWinRT#1213
@bogdan-patraucean
Copy link

It should be fixed in the latest WindowsAppSDK version. I tested navigating back & forth and it's indeed increasing the memory but for my app it stops at around 500 MB of RAM. As far as I know there is a cache limit until which no memory will be released, so probably that's why it's still increasing.

@brandon3343
Copy link

Is this issue not a high priority? "WinUI 3 Gallery" and "PowerToys" also has this problem(WinAppSDK: 1.2).

@vfib
Copy link

vfib commented Apr 24, 2023

Any news on this? Otherwise, where can I look to get updates for this? Created a WinUI 3, version 1.3, app with the template studio under win 11 and memory is increasing after each menu change.
@bogdan-patraucean I might not be up to date in C# and .NET, but 500 MB full of items not needed sounds kind of unpleasent for me. Where are the times youd want a app that uses as little memory as possible?

@brandon3343
Copy link

brandon3343 commented Apr 25, 2023

@vfib memory usage still increase when more than 500 MB, but the growth will slow down. if you continue navigation, your app will crash. (tested with WinAppSDK 1.3)

Powertoys can be used for testing, navigated to difference page many times, Powertoys will crash.

Temporary solutions is:

private void ContentFrame_Navigated(object sender, NavigationEventArgs e)
{
    System.GC.Collect();
}

@vfib
Copy link

vfib commented Apr 25, 2023

@l619534951 Yeah, there seem to be some problems with navigation right now. Offtopic, but setting a ThemeResource to create a card like stackpanel in settings page causes my app to crash under certain circumstances after third navigation back and forth. But thanks for that workaround!

@AdriaanLarcai
Copy link

Years later this is still an issue from UWP days... Is this something that can actually be solved? Or should we rather undertake the massive effort to move our years-in-the-making application to a different platform?

@ranjeshj
Copy link
Contributor

ranjeshj commented Oct 9, 2023

We've made leak fixes in the recent 1.4 WASDK release. Please give the latest build a try and let us know if this is still an issue. Memory growth is expected until GC kicks in. If you see unbounded growth or leak in a native app, please let us know.

@ranjeshj ranjeshj closed this as completed Oct 9, 2023
@marwalsch
Copy link

@ranjeshj
I have updated to 1.4.231008000 and don't see any difference whatsoever. The GC barely cleans up anything at all.
Memory build-up diminishes when approaching the 500 MB mark but it will inevitably overflow. This is still a huge issue and should be re-opened

@sude22
Copy link

sude22 commented Nov 16, 2023

It really is a great misfortune that such a central function as navigation still does not work without errors. It is not possible to develop professional applications with the WinAppSdk in its current state. The memory leak in the navigation in combination with the use of the WebView2 control (a new instance is created with every page change) causes every application to crash after a few days of use.
I hate to think back to the day over a year ago when our team made the decision to build a new LOB application based on WinUI3.

@microsoft-github-policy-service microsoft-github-policy-service bot added the needs-triage Issue needs to be triaged by the area owners label Nov 16, 2023
@ranjeshj ranjeshj reopened this Dec 1, 2023
@bpulliam bpulliam added bug Something isn't working and removed needs-triage Issue needs to be triaged by the area owners labels Dec 11, 2023
@bpulliam bpulliam changed the title Discussion: Memory leak in NavigationView even though I cleared the child page element while unloading. Memory leak in NavigationView even though I cleared the child page element while unloading. Dec 11, 2023
@Sahil12524
Copy link

@vfib memory usage still increase when more than 500 MB, but the growth will slow down. if you continue navigation, your app will crash. (tested with WinAppSDK 1.3)

Powertoys can be used for testing, navigated to difference page many times, Powertoys will crash.

Temporary solutions is:

private void ContentFrame_Navigated(object sender, NavigationEventArgs e)
{
    System.GC.Collect();
}

The official clock app
image
is also crashing when navigating different pages. The memory never releases and getting increased again and again.
even settings of windows 11 is having memory leak
image
the memory never gets freed!

@jeffintc
Copy link

Is there any news on this? It still seems to be occurring with WinApp 1.5 (and .NET 8) with a sample app I created.

@LucaCris
Copy link

Confirmed also with VS 17.10

@Tiktack
Copy link

Tiktack commented Aug 24, 2024

Still reproducible with latest WinUI3 Gallery. Spawning additional windows from "Multiple Windows" menu and closing them not releases memory to initial state. 3 years and issue still not addressed....

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area-NavigationView NavView control area-Performance bug Something isn't working product-winui3 WinUI 3 issues team-Controls Issue for the Controls team v0.8 Issues introduced in the Project Reunion 0.8 prerelease
Projects
None yet
Development

No branches or pull requests