Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Deleting project/pages/usercontrols from memory

I have made a windows phone app, that unfortunately has some memory leak, because pages are not removed correctly. This was solved by using the answer:

Remove Pages windows phone Stating:

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
while (App.RootFrame.RemoveBackEntry() != null) ; //line if you navigate without backkey
base.OnNavigatedTo(e);

this.Dispatcher.BeginInvoke(() =>
{
    GC.Collect();
    GC.WaitForPendingFinalizers();

    this.Dispatcher.BeginInvoke(() =>
    {
        GC.Collect();
        GC.WaitForPendingFinalizers();

        this.Dispatcher.BeginInvoke(() =>
        {
            GC.Collect();
            GC.WaitForPendingFinalizers();
        });
    });

}

This removed the page references from the profiler. But the memory still increased some upon navigation. And it was not obvious where the increased memory came from. I therefore Tried introducing a blank project and navigated to that as a star navigation, Illustrated as:

enter image description here

This made removed upwards of 20 mb, of visuals and other elements. So this was a major step. I therefore wanted to split functionality out onto different projects as to remove any ties between the different functionalities and keep low memory usage. This ended up with the following structure:

  • WebService
  • MainProject
  • SecondaryProject
  • PortableLibrary

I share models between all projects using the Portable Library. This influenced that upon every navigation to a new project everything is cleared in the old project, i.e. only one element of each item exist, major memory improvement. But still some memory leak, however bounded, meaning only a certain increase in memory. But where comes the memory from? Going back into the profiler:

enter image description here

This shows that the pages are not removed specifically, all elements .view. would have been removed by the code in the configuration of all pages being in one project. However the memory leak is similar.

The Question

  1. How do I remove pages and elements from a different project within the same solution?
  2. How do I remove a project from memory?

There is not information shared between the two projects, other than they both can create a version of LibraryOfModels. Therefore no events, variables or references is shared across the project borders. But for the life of me I cannot get it removed from memory. I want to remove them from the memory, as my code snippet in the top does, IF the navigation was only within one project. The issue exists because of the navigation is spread out on two projects. But it has some memory benefits in other areas, which is why I want this structure.

Hope somebody can help. Thx!

Additional tests

I have tried making all pages usercontrols such that I could avoid navigation. But recreating them a couple of times gav a steady leak of 1-2 Mb. The project idea is therefore still best as there is a bound. But still no solution of getting it removed.

Still hoping for the knight with the shiney keyboard ;)

like image 222
JTIM Avatar asked Mar 07 '15 11:03

JTIM


1 Answers

I think you can make the object singleton and you can clear the values of objects manually when accordingly. Please refer the link below https://msdn.microsoft.com/en-us/library/ff650316.aspx

like image 127
Justin CI Avatar answered Sep 23 '22 19:09

Justin CI