Я вижу огромную утечку памяти в программе, которую я создаю с использованием 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();
}
}
}
XAML Window1.,.
<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();
}
Загадочные - есть идеи ???