powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / утечка памяти в WPF приложениях
25 сообщений из 33, страница 1 из 2
утечка памяти в WPF приложениях
    #36907464
sergiy_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При работе WPF Приложения постоянно возникает утечка памяти
обычное окно в котором даже нет ни какого биндинга, в котором вообще нет ни каких событий
вызывает постоянный рост памяти
вот код простейшего приложения

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
public Window1()
        {
            InitializeComponent();
        }
        int i;

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            i++;
            textBox.Text = i.ToString()+") "+  GC.GetTotalMemory(true).ToString();
            listBox.Items.Add( i.ToString()+") "+GC.GetTotalMemory(true).ToString());
            Window wind = new Window();
            try
            {
                

           wind.Content = XamlReader.Parse(File.ReadAllText(@"Test.XAML")) as FrameworkElement;

            }
            catch(Exception ex) {MessageBox.Show(ex.ToString()); }
           wind.Show();
           wind.Closed += wind_Closed;

           wind.Close();

        }

        void wind_Closed(object sender, EventArgs e)
        {
            Window wind = sender as Window;
            wind.Closed -= wind_Closed;
          // GC.Collect();
        }

и эта утечка тем больше, чем Размер Xaml файла,
конечно не очень много
A если же приложение бдует работать без закрытия неограниченно долгое время?
что делать??
...
Рейтинг: 0 / 0
утечка памяти в WPF приложениях
    #36908515
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergiy_s,

а ты как нито, визуально покажи, что означает твоя утечка или с помощью математических символов ?
...
Рейтинг: 0 / 0
утечка памяти в WPF приложениях
    #36909036
sergiy_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
чуть переписал код, что бы он постоянно скидывал в лог объем занимаемой памяти
смысла нет приводить весь лог, но занимаемая память постоянно растет ненамного конечно
но растет
Начальная память 455748
1) 479956 24208
.....
62) 877716 452

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
  public Window1()
        {
            InitializeComponent();
            mem = GC.GetTotalMemory(true);
            File.WriteAllText("C:/Log.txt","Начальная память "+   mem.ToString() + "\n");
        }

        int MaxCount =  20 ;
        int i;
        long add;
        long mem;

        private void Button_Click(object sender, RoutedEventArgs e)
        { MadeWind(); }

        void MadeWind()
        {
            i++;
            add = GC.GetTotalMemory(true) - mem;
            mem = GC.GetTotalMemory(true);

            MEMORY.Text = i.ToString() + ") " + mem.ToString() + "               " + add.ToString();
            File.WriteAllText("C:/Log.txt", File.ReadAllText("C:/Log.txt") + i.ToString() + ") " + mem.ToString() + "          " + add.ToString() + "\n");

            Window wind = new Window();
            try
            {
                wind.Content = new UserControl1();  //XamlReader.Parse(File.ReadAllText(@"D:\2.08.0012.5\Development\FilterTest.XAML")) as FrameworkElement;
            }
            catch (Exception ex) { MessageBox.Show(ex.ToString()); }
            wind.Show();
            wind.Close();
            GC.Collect();
        }

    }
...
Рейтинг: 0 / 0
утечка памяти в WPF приложениях
    #36910211
Фотография Кое-кто
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем тебе log.txt ? Используй счетчики производительности.

PerformanceCounter
...
Рейтинг: 0 / 0
утечка памяти в WPF приложениях
    #36911344
sergiy_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
блин не важно, что я использую так было быстрее.
И к стати дальнейшие исследования показали, что то же приложение у которого загружается пустое окно или Хамл у загружаемого UserControl1 очень простой работает без ошибок.
Я же изначально грузил в окно достаточно большой и навороченный Хамл
,вот теперь буду исследовать какой элемент не освобождает память.
...
Рейтинг: 0 / 0
утечка памяти в WPF приложениях
    #36911662
Фотография уТКа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergiy_s,

попробуй так же сам объект "wind" равнять к "null" по идее должна происходить уборка после этого.
...
Рейтинг: 0 / 0
утечка памяти в WPF приложениях
    #36915422
Фотография Кое-кто
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что такое UserControl1 ?
...
Рейтинг: 0 / 0
утечка памяти в WPF приложениях
    #36915702
sergiy_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UserControl1 не содержит кода, но хамл достаточно сложный.
Если хамл простой память высвобождается полностью.
К сожалению не хватает времени проанализировать, что именно жрет память
По крайней мере убедился, что нет необходимости всегда отписывать-ся от событий при закрытии окна.
Но например если в коде вы подписались на изменение свойства зависимости типа так
Код: plaintext
1.
 DependencyPropertyDescriptor ColumnVisibilytyDescriptor = DependencyPropertyDescriptor.FromProperty(DataGridColumn.VisibilityProperty, typeof(DataGridColumn));
 ColumnVisibilytyDescriptor.AddValueChanged(Column, OnColumnVisibleChanded);

то отписываться необходимо.
...
Рейтинг: 0 / 0
утечка памяти в WPF приложениях
    #36916090
Фотография Верблюд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sergiy_s,

дык, если при простом XAML в UserControl1 проблемма рассасывается, значит проблема в нем, а не втом куске, который ты тут привел. Выкладывай - посмотрим.
...
Рейтинг: 0 / 0
утечка памяти в WPF приложениях
    #36916492
sergiy_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
 <TextBox Text="TextBox"  Height="30" Width="200"/>
...
Рейтинг: 0 / 0
утечка памяти в WPF приложениях
    #36916495
sergiy_s
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как ни странно именно текст бокс и вызывает утечку
убираешь его утечек нет.
...
Рейтинг: 0 / 0
утечка памяти в WPF приложениях
    #37105534
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
народ,вот набросал код приложения. это часы .
вопрос, почему эта программа ест память?

программа прикреплена к сообщению.
...
Рейтинг: 0 / 0
утечка памяти в WPF приложениях
    #37105605
i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i
Гость
timer - глобальный ресурс, содержит ссылку на твое окно, посему ресурсы не освобождаются
...
Рейтинг: 0 / 0
утечка памяти в WPF приложениях
    #37105824
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а как быть?
...
Рейтинг: 0 / 0
утечка памяти в WPF приложениях
    #37105975
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сделал простой цикл в mainwindow.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
    Private Sub Window_Loaded(sender As System.Object, e As System.Windows.RoutedEventArgs)
        For i As Integer =  0  To  100000 
            sett( 0 )
        Next
    End Sub
    Public Sub sett(a As String)
        timetext.Content = Date.Now.AddSeconds( 1 ).ToString
    End Sub
под дебагом жму Run и смотрю в task manager.
жрет память:(
БП стоит в public sub sett.
...
Рейтинг: 0 / 0
утечка памяти в WPF приложениях
    #37110633
Фотография aleks-sam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня не есть. Иногда прыгает на килобайт 20 потом опять падает. Win7 64
...
Рейтинг: 0 / 0
утечка памяти в WPF приложениях
    #37110634
Фотография aleks-sam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
* не ест.
...
Рейтинг: 0 / 0
утечка памяти в WPF приложениях
    #37134232
ndm25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
народ, а в таком случае, что может быть проблеммой - это просто контрол с флоудокументом, в котором формируется таблица. ресурсы не хотят освобождаться. подскажите пожалуйста!
...
Рейтинг: 0 / 0
утечка памяти в WPF приложениях
    #37134285
Фотография aleks-sam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ndm25народ, а в таком случае, что может быть проблеммой - это просто контрол с флоудокументом, в котором формируется таблица. ресурсы не хотят освобождаться. подскажите пожалуйста!
Напомни мне тут глянуть завтра профайлер памяти)
...
Рейтинг: 0 / 0
утечка памяти в WPF приложениях
    #37134307
ndm25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks-sam,

хорошо! сам смотрел в профайлере, разобраться не смог...(
...
Рейтинг: 0 / 0
утечка памяти в WPF приложениях
    #37134817
Фотография aleks-sam
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот этим я гляжу. Глядеть некогда пока)
...
Рейтинг: 0 / 0
утечка памяти в WPF приложениях
    #37135120
ndm25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks-sam,

я в профайлере вижу referenced by объекты, но что с ними делать в данном конкретном случае не знаю.

при закомментированных

// userControl11.FD.Dispatcher.BeginInvokeShutdown(DispatcherPriority.ContextIdle);
// Dispatcher.Run();

по закрытию Form1 - в памяти тем не менее остаются висеть ссылки на Usercontrol11, Flowdocument, Table, TableCell и т.д.
...
Рейтинг: 0 / 0
утечка памяти в WPF приложениях
    #37135344
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ndm25,

проблема не в WPF-ном UserControl1, деструктор которого вызывается
~UserControl1()
{
System.Diagnostics.Debug.WriteLine("UserControl1.Finalize");
}
а в winforms-овской Form1, деструктор которой не вызывается (вероятно, System.Windows.Forms.Integration.ElementHost весьма "тяжелая" весчь, впрочем, как и все "Integration")
...
Рейтинг: 0 / 0
утечка памяти в WPF приложениях
    #37135567
ndm25
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LR,

по профайлеру Form1 - live Instances 0 после закрытия. т.е. деструктор отработал, насколько я понимаю...
...
Рейтинг: 0 / 0
утечка памяти в WPF приложениях
    #37135645
Фотография LR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ndm25,

да нет, если поставить точку останова в
~Form1()
{
System.Diagnostics.Debug.WriteLine("Form1.Finalize");
}
то можно убедиться, что деструктор не вызывается (а ~UserControl1() вызывается)
...
Рейтинг: 0 / 0
25 сообщений из 33, страница 1 из 2
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / утечка памяти в WPF приложениях
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]