Я вижу огромную утечку памяти в программе, которую я создаю с помощью WPF. Я написал небольшое примерное приложение, которое, похоже, реплицирует эту проблему в меньших масштабах.WPF прозрачное окно не удаляется при закрытии
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
images = Directory.GetFiles("C:\\Photos", "*.jpg",
SearchOption.TopDirectoryOnly);
foreach (string image in images)
{
Window1 window = new Window1(image);
window.Show();
window.Close();
}
}
}
Window1 XAML. , ,
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1"
AllowsTransparency="True"
WindowStyle="None"
Background="White"
Opacity="1.0"
<Grid>
<Image Name="pb_Image"/>
</Grid>
. , , и Window1 код
public Window1(string image)
{
InitializeComponent();
BitmapImage bi = new BitmapImage(new Uri(image, UriKind.Absolute));
bi.Freeze();
pb_Image.Source = bi;
pb_Image.Height = bi.Height;
pb_Image.Width = bi.Width;
}
Многократно показывает, а затем закрывает окно, которое содержит BitmapImage
однако «вне исключения памяти» происходит очень быстро, так что я, очевидно, делает что-то неправильно, и надеясь, что кто-то может указать его!
* Обновление *
После игры вокруг некоторое время я изолировал проблему, это вызывает утечку памяти:
foreach (string image in images)
{
Window1 window = new Window1(image);
window.Show();
window.Close();
}
и это не
foreach (string image in images)
{
Window1 window = new Window1("C:\\Photos\\photo1.jpg");
window.Show();
window.Close();
}
Puzzling - любые идеи ???
Taskmgr является * очень * несовершенным профилировщиком памяти, как сборщик мусора, так и диспетчер памяти Windows, слишком сложны, чтобы уклоняться от второго числа одним числом. Докажите, что у вас есть настоящая проблема, запустив этот код миллион раз. –
Я обновляю свой код, надеюсь, более точно покажу, что происходит. Я подозреваю, что мой оригинальный уменьшенный код не точно воспроизводил проблему, которую я испытываю. – Gavimoss
проверьте этот: http://stackoverflow.com/questions/568408/what-is-the-correct-way-to-dispose-of-a-wpf-window –