Laden...

wechselnder Speicherverbrauch, ohne dass es nötig wäre

Erstellt von tkrasinger vor 12 Jahren Letzter Beitrag vor 12 Jahren 737 Views
Thema geschlossen
T
tkrasinger Themenstarter:in
574 Beiträge seit 2008
vor 12 Jahren
wechselnder Speicherverbrauch, ohne dass es nötig wäre
<Window 
    x:Class="WPFMemoryUsage.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
    <StackPanel>
        <StackPanel Orientation="Horizontal">
            <TextBlock>Memoryusage:</TextBlock>
            <TextBlock x:Name="lblMemoryUsage"></TextBlock>
            <Button x:Name="btnGetMemoryUsage" Click="btnGetMemoryUsage_Click">Recalculate</Button>
        </StackPanel>
    </StackPanel>
</Window>
private void btnGetMemoryUsage_Click(object sender, RoutedEventArgs e)
{
   System.GC.Collect();
    System.GC.WaitForPendingFinalizers();
    System.GC.Collect();
    using (Process process = Process.GetCurrentProcess())
    {
        double value = process.WorkingSet64 / 1024.0 / 1024.0;
        lblMemoryUsage.Text = value.ToString("#.000 MB");
    }
}

Wenn ich ein paar mal auf den Button klicke, merke ich einen Anstieg des Speicherverbrauchs, obwohl das Programm ja augenscheinlich nicht mehr verbraucht ... Irgendann machts dann einen Sprung und der Verbraucht geht wieder runter, aber nicht mehr zu dem Wert ganz zu Beginn ...

und auch wenn ich den GC etwas Feuer mache, es werden nur die Sprünge etwas kleiner.

Wenn ich eine Anwendung mit dem oben gezeigten Quellcode im Release erstelle und dann die .exe starte, verbraucht die etwa 33MB (ich mein allein das ist schon ein Wahnsinn). Wenn ich dann eine Minute, alle 20 sekunden auf den Button drücke, ohne die Maus zu bewegen, dann hab ich nach etwa 4 mal klicken 1 MB mehr verbraucht. Für was?

Wenn ich blöd mit der Maus im Fenster herumfuchtle ist auch gleich fast ein MB ...

Welche internen Sachen verbraucht da die WPF und was kann ich alles abdrehen um den Speicherverbrauch zu optimieren?

16.842 Beiträge seit 2008
vor 12 Jahren

Woher nimmst Du die Annahme des Speicherverbrauches? Nur aus dem Code?
Wenn Du den Task Manager dazu heranziehst: vergiss das, was da steht. Dazu wird es auch unzählige Treffer hier in der Forensuche geben.
Und ich meine, dass die Process Angabe diesbezüglich auch nicht wirklich verlässlich ist.

Der GC kommt eigentlich ganz gut selbst mit sich zurecht. Vor allem im Hinblick auf .NET 4.5 wird sich hier einiges tun.
Daher nicht unnötig irgendwelcher Speicherlecks suchen, die eigentlich gar nicht existieren.

WPF an sich ist aber schon etwas lastiger für den Speicher; vor allem wenn man gewisse Elemente ungünstig schachtelt. Aber das ist die Technologie an sich. Standardmäßig sollte das erste Element zum Beispiel ein Grid sein; kein Stackpanel. Aber da kenn ich mich nun zu wenig mit WPF aus, um hier sgaen zu können, welche Konstellationen ungünstig sind.

49.485 Beiträge seit 2005
vor 12 Jahren

Hallo tkrasinger,

solange kein Speicher verbraucht wird, der anderweitig benötigt wird, fällt das ganze eh unter "premature optimization is the root of all evil".

Wie Abt schon gesagt hat, gibt es bereits unzähligen Threads zu dem Thema. Wir brauchen und sollten das ganze also nicht nochmal aufrollen. Sollte es wider Erwarten Punkte geben, die bisher in keinem der Thread behandelt wurden, sagt bitte Bescheid.

herbivore

Thema geschlossen