Cześć,
Mam problem. Poniżej przedstawiam wam prosty kod trzech okien w WPF.
Okno 3
public partial class Window3 : Window
{
byte[] byt;
public Window3()
{
InitializeComponent();
byt = new byte[50000 * 1024];
}
}
Okno 2
public partial class Window2 : Window
{
byte[] byt;
public Window2()
{
InitializeComponent();
byt = new byte[50000 * 1024];
Window3 wn = new Window3();
}
}
Okno 1 (zawiera tylko przycisk button1)
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
Window2 wn = new Window2();
wn.ShowDialog();
}
}
Teraz w momencie gdy ok 10x wykonam operację:
Klikam na button1 (otwiera się okno 2)
Zamykam okno 2
Znowu klikam na button1 (otwiera się okno 2)
Zamykam okno 2
.
.
.
I tak ok 10x
W pewnym momencie dostaje wyjątek OutOfMemory.
Co jest przecież wszystkie zmienne są lokalne i gc powinien zwalniać pamięć?!
Ważnym elementem kodu jest zadeklarowanie Okna 3 w oknie 2. Bez tego wszystko działa ok. Sprawdzałem programami do profilowania pamięci (NET Memory Profiler) i okazało się, że pamięć ciągle rośnie aż aplikacja się wywala.