Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / утечка памяти в WPF приложениях / 25 сообщений из 33, страница 1 из 2
19.10.2010, 14:01
    #36907464
sergiy_s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
утечка памяти в WPF приложениях
При работе 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
19.10.2010, 19:20
    #36908515
AlexeiK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
утечка памяти в WPF приложениях
sergiy_s,

а ты как нито, визуально покажи, что означает твоя утечка или с помощью математических символов ?
...
Рейтинг: 0 / 0
20.10.2010, 11:06
    #36909036
sergiy_s
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
утечка памяти в WPF приложениях
чуть переписал код, что бы он постоянно скидывал в лог объем занимаемой памяти
смысла нет приводить весь лог, но занимаемая память постоянно растет ненамного конечно
но растет
Начальная память 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
20.10.2010, 17:39
    #36910211
Кое-кто
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
утечка памяти в WPF приложениях
А зачем тебе log.txt ? Используй счетчики производительности.

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

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

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

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

программа прикреплена к сообщению.
...
Рейтинг: 0 / 0
09.02.2011, 01:08
    #37105605
i
i
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
утечка памяти в WPF приложениях
timer - глобальный ресурс, содержит ссылку на твое окно, посему ресурсы не освобождаются
...
Рейтинг: 0 / 0
09.02.2011, 09:19
    #37105824
AlexeiK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
утечка памяти в WPF приложениях
а как быть?
...
Рейтинг: 0 / 0
09.02.2011, 10:29
    #37105975
AlexeiK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
утечка памяти в WPF приложениях
сделал простой цикл в 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
11.02.2011, 09:55
    #37110633
aleks-sam
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
утечка памяти в WPF приложениях
У меня не есть. Иногда прыгает на килобайт 20 потом опять падает. Win7 64
...
Рейтинг: 0 / 0
11.02.2011, 09:56
    #37110634
aleks-sam
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
утечка памяти в WPF приложениях
* не ест.
...
Рейтинг: 0 / 0
24.02.2011, 17:35
    #37134232
ndm25
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
утечка памяти в WPF приложениях
народ, а в таком случае, что может быть проблеммой - это просто контрол с флоудокументом, в котором формируется таблица. ресурсы не хотят освобождаться. подскажите пожалуйста!
...
Рейтинг: 0 / 0
24.02.2011, 17:51
    #37134285
aleks-sam
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
утечка памяти в WPF приложениях
ndm25народ, а в таком случае, что может быть проблеммой - это просто контрол с флоудокументом, в котором формируется таблица. ресурсы не хотят освобождаться. подскажите пожалуйста!
Напомни мне тут глянуть завтра профайлер памяти)
...
Рейтинг: 0 / 0
24.02.2011, 17:58
    #37134307
ndm25
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
утечка памяти в WPF приложениях
aleks-sam,

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

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

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

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

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

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

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

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


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