c# - यूडब्ल्यूपी-फ़्रेम नेविगेशन अप्रबंधित स्मृति लीक का कारण लगता है



memory memory-leaks (1)

ऐसा लगता है कि फ्रेम नेविगेशन (विशेष रूप से फ्रेम। नेविगेट ( प्रकार) विधि) अप्रबंधित स्मृति लीक कर रहा है
प्रत्येक नेविगेशन के बाद जब मैं विज़ुअल स्टूडियो डायग्नोस्टिक टूल को देखता हूं, निजी बाइट्स चल रहा है, लेकिन जब मैं मेमोरी का स्नैपशॉट लेता हूं, तब तक हीप आकार बढ़ नहीं रहा है। अधिक घटकों के पृष्ठ में यह बहुत बुरा है। स्मृति को कभी भी जारी नहीं होना प्रतीत होता है यह कोई फर्क नहीं पड़ता कि ऐप डीबग या रिलीज में बनाया गया है या नहीं (दोनों नेट नेटिव और बिना)। मैं 14393 एसडीके (वर्षगांठ अद्यतन) का उपयोग कर रहा हूं।

मैंने एक नमूना एप्लिकेशन बनाया है जिसमें एक मास्टर पेज और 2 (सामग्री) पृष्ठ हैं जो बीच में नेविगेट करते हैं (पेजलोडेड ईवेंट पर)। मैंने फ़्रेम में कैश साइज़ = "0" निर्धारित किया है और पेजों ने नेविगेशन कैश मोड = " अक्षम" किया है, इसलिए वे कैश्ड नहीं पाते हैं। मैं हर नेविगेशन से पहले बैकस्टैक को साफ़ कर रहा हूं और पृष्ठ पर अपलोड किए गए प्रत्येक ईवेंट को समाप्त कर रहा हूं।
यहां पृष्ठों में से एक के लिए। सीसी फ़ाइल है:

public sealed partial class FirstPage : Page
{
    public FirstPage()
    {
        this.InitializeComponent();
    }

    private void NavigateToSecondPage()
    {
        MainPage.ContentFrame.BackStack.Clear();
        MainPage.ContentFrame.Navigate(typeof(SecondPage));
    }

    private void NavigateButton_Click(object sender, RoutedEventArgs e)
    {
        NavigateToSecondPage();
    }

    private void Page_Loaded(object sender, RoutedEventArgs e)
    {
        if (!MainPage.StopNavigating)
        {
            NavigateToSecondPage();
        }
    }

    private void Page_Unloaded(object sender, RoutedEventArgs e)
    {
        this.NavigateButton.Click -= NavigateButton_Click;
        this.Loaded -= Page_Loaded;
        this.Unloaded -= Page_Unloaded;
    }
}

और संबंधित एक्सएएमएल फ़ाइल:

<Page
    x:Class="LeakTestApp.FirstPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:LeakTestApp"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Loaded="Page_Loaded"
    Unloaded="Page_Unloaded">

    <StackPanel Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <TextBlock Text="First Page" FontSize="32" />
        <Button x:Name="NavigateButton" Content="Navigate to Second Page" Click="NavigateButton_Click" />
        <StackPanel Width="350">
            <TextBox />
            <TextBox />
            <TextBox />
            <TextBox />
            <TextBox />
            <TextBox />
            <TextBox />
            <TextBox />
            <TextBox />
            <TextBox />
            <TextBox />
            <TextBox />
            <TextBox />
            <TextBox />
            <TextBox />
            <TextBox />
            <TextBox />
            <TextBox />
            <TextBox />
        </StackPanel>
    </StackPanel>
</Page>

यहां टेक्स्ट बॉक्स बेहतर समस्या दिखाने के लिए हैं।
आप यहां देख सकते हैं कि जैसे ही मैं नेविगेशन शुरू कर रहा हूं, निजी बाइट्स तेजी से बढ़ती हैं, लेकिन हीप आकार में वृद्धि नहीं होती है।
कैश को सक्षम करना (नेविगेशन कैश मोड = "आवश्यक") या मैन्युअल रूप से जीसी कॉल करना। संकलक () मदद नहीं करता है।
आप यहां पूर्ण स्रोत कोड देख सकते हैं

क्या ज़ाहिर तौर पर कुछ ऐसा है, जिसका मुझे स्मरण नहीं है? क्या मैं सब कुछ ठीक से नहीं साफ कर रहा हूं? या शायद रनटाइम अंततः स्मृति जारी करेगा?

धन्यवाद

अद्यतन: व्यवहार दिखाते हुए वीडियो के लिए टिप्पणियों को देखो (मुझे 2 से अधिक लिंक पोस्ट करने के लिए पर्याप्त प्रतिष्ठा नहीं है)


मैं आपकी समस्या को पुन: उत्पन्न नहीं कर सकता क्योंकि आपके प्रोजेक्ट का मॉनिटर परिणाम मेरी तरफ से है I मुझे आपकी तस्वीर में गैबेज संग्रह नहीं मिला। लेकिन मेरे पक्ष में जीसी के पास अक्सर काम किया जाता है। ध्यान दें कि जीसी वास्तविक समय में नहीं है। आप खुद को एकत्रित करने के लिए GC.Collect Method () का उपयोग करने की कोशिश कर सकते हैं लेकिन किसी उत्पाद में उपयोग करने की अनुशंसा नहीं की जाती है। विवरण आप इस धागे को संदर्भित कर सकते हैं।





uwp