Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / WPF, Silverlight Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 утечка памяти в WPF приложениях  [new]
sergiy_s
Member

Откуда:
Сообщений: 185
При работе WPF Приложения постоянно возникает утечка памяти
обычное окно в котором даже нет ни какого биндинга, в котором вообще нет ни каких событий
вызывает постоянный рост памяти
вот код простейшего приложения

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 если же приложение бдует работать без закрытия неограниченно долгое время?
что делать??
19 окт 10, 14:01    [9633937]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти в WPF приложениях  [new]
AlexeiK
Member

Откуда:
Сообщений: 2859
sergiy_s,

а ты как нито, визуально покажи, что означает твоя утечка или с помощью математических символов ?
19 окт 10, 19:20    [9637188]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти в WPF приложениях  [new]
sergiy_s
Member

Откуда:
Сообщений: 185
чуть переписал код, что бы он постоянно скидывал в лог объем занимаемой памяти
смысла нет приводить весь лог, но занимаемая память постоянно растет ненамного конечно
но растет
Начальная память 455748
1) 479956 24208
.....
62) 877716 452

  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();
        }

    }
20 окт 10, 11:06    [9639218]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти в WPF приложениях  [new]
Кое-кто
Member

Откуда: Сингулярность
Сообщений: 2817
А зачем тебе log.txt ? Используй счетчики производительности.

PerformanceCounter
20 окт 10, 17:39    [9643264]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти в WPF приложениях  [new]
sergiy_s
Member

Откуда:
Сообщений: 185
блин не важно, что я использую так было быстрее.
И к стати дальнейшие исследования показали, что то же приложение у которого загружается пустое окно или Хамл у загружаемого UserControl1 очень простой работает без ошибок.
Я же изначально грузил в окно достаточно большой и навороченный Хамл
,вот теперь буду исследовать какой элемент не освобождает память.
21 окт 10, 10:48    [9646861]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти в WPF приложениях  [new]
уТКа
Member

Откуда: Страна дураков и разбитых дорог
Сообщений: 1266
sergiy_s,

попробуй так же сам объект "wind" равнять к "null" по идее должна происходить уборка после этого.
21 окт 10, 12:04    [9647687]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти в WPF приложениях  [new]
Кое-кто
Member

Откуда: Сингулярность
Сообщений: 2817
Что такое UserControl1 ?
22 окт 10, 19:51    [9660343]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти в WPF приложениях  [new]
sergiy_s
Member

Откуда:
Сообщений: 185
UserControl1 не содержит кода, но хамл достаточно сложный.
Если хамл простой память высвобождается полностью.
К сожалению не хватает времени проанализировать, что именно жрет память
По крайней мере убедился, что нет необходимости всегда отписывать-ся от событий при закрытии окна.
Но например если в коде вы подписались на изменение свойства зависимости типа так
 DependencyPropertyDescriptor ColumnVisibilytyDescriptor = DependencyPropertyDescriptor.FromProperty(DataGridColumn.VisibilityProperty, typeof(DataGridColumn));
 ColumnVisibilytyDescriptor.AddValueChanged(Column, OnColumnVisibleChanded);

то отписываться необходимо.
23 окт 10, 08:02    [9662039]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти в WPF приложениях  [new]
Верблюд
Member

Откуда: Яженичеловек!!!
Сообщений: 65007
sergiy_s,

дык, если при простом XAML в UserControl1 проблемма рассасывается, значит проблема в нем, а не втом куске, который ты тут привел. Выкладывай - посмотрим.
23 окт 10, 20:11    [9663050]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти в WPF приложениях  [new]
sergiy_s
Member

Откуда:
Сообщений: 185
 <TextBox Text="TextBox"  Height="30" Width="200"/>
24 окт 10, 12:31    [9664663]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти в WPF приложениях  [new]
sergiy_s
Member

Откуда:
Сообщений: 185
как ни странно именно текст бокс и вызывает утечку
убираешь его утечек нет.
24 окт 10, 12:34    [9664667]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти в WPF приложениях  [new]
AlexeiK
Member

Откуда:
Сообщений: 2859
народ,вот набросал код приложения. это часы .
вопрос, почему эта программа ест память?

программа прикреплена к сообщению.

К сообщению приложен файл (ontop.rar - 112Kb) cкачать
8 фев 11, 23:32    [10205138]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти в WPF приложениях  [new]
i
Guest
timer - глобальный ресурс, содержит ссылку на твое окно, посему ресурсы не освобождаются
9 фев 11, 01:08    [10205324]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти в WPF приложениях  [new]
AlexeiK
Member

Откуда:
Сообщений: 2859
а как быть?
9 фев 11, 09:19    [10205865]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти в WPF приложениях  [new]
AlexeiK
Member

Откуда:
Сообщений: 2859
сделал простой цикл в mainwindow.

    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.
9 фев 11, 10:29    [10206280]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти в WPF приложениях  [new]
aleks-sam
Member

Откуда: Krasnoyarsk
Сообщений: 1850
У меня не есть. Иногда прыгает на килобайт 20 потом опять падает. Win7 64
11 фев 11, 09:55    [10218419]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти в WPF приложениях  [new]
aleks-sam
Member

Откуда: Krasnoyarsk
Сообщений: 1850
* не ест.
11 фев 11, 09:56    [10218424]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти в WPF приложениях  [new]
ndm25
Member

Откуда:
Сообщений: 13
народ, а в таком случае, что может быть проблеммой - это просто контрол с флоудокументом, в котором формируется таблица. ресурсы не хотят освобождаться. подскажите пожалуйста!

К сообщению приложен файл (WpfApplication2.rar - 91Kb) cкачать
24 фев 11, 17:35    [10285392]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти в WPF приложениях  [new]
aleks-sam
Member

Откуда: Krasnoyarsk
Сообщений: 1850
ndm25
народ, а в таком случае, что может быть проблеммой - это просто контрол с флоудокументом, в котором формируется таблица. ресурсы не хотят освобождаться. подскажите пожалуйста!

Напомни мне тут глянуть завтра профайлер памяти)
24 фев 11, 17:51    [10285531]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти в WPF приложениях  [new]
ndm25
Member

Откуда:
Сообщений: 13
aleks-sam,

хорошо! сам смотрел в профайлере, разобраться не смог...(
24 фев 11, 17:58    [10285581]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти в WPF приложениях  [new]
aleks-sam
Member

Откуда: Krasnoyarsk
Сообщений: 1850
Вот этим я гляжу. Глядеть некогда пока)
25 фев 11, 05:27    [10287009]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти в WPF приложениях  [new]
ndm25
Member

Откуда:
Сообщений: 13
aleks-sam,

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

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

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

по закрытию Form1 - в памяти тем не менее остаются висеть ссылки на Usercontrol11, Flowdocument, Table, TableCell и т.д.
25 фев 11, 10:36    [10287942]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти в WPF приложениях  [new]
LR
Member

Откуда: 8P8C
Сообщений: 2423
ndm25,

проблема не в WPF-ном UserControl1, деструктор которого вызывается
~UserControl1()
{
System.Diagnostics.Debug.WriteLine("UserControl1.Finalize");
}
а в winforms-овской Form1, деструктор которой не вызывается (вероятно, System.Windows.Forms.Integration.ElementHost весьма "тяжелая" весчь, впрочем, как и все "Integration")
25 фев 11, 11:47    [10288559]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти в WPF приложениях  [new]
ndm25
Member

Откуда:
Сообщений: 13
LR,

по профайлеру Form1 - live Instances 0 после закрытия. т.е. деструктор отработал, насколько я понимаю...
25 фев 11, 12:34    [10289043]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти в WPF приложениях  [new]
LR
Member

Откуда: 8P8C
Сообщений: 2423
ndm25,

да нет, если поставить точку останова в
~Form1()
{
System.Diagnostics.Debug.WriteLine("Form1.Finalize");
}
то можно убедиться, что деструктор не вызывается (а ~UserControl1() вызывается)
25 фев 11, 12:55    [10289224]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / WPF, Silverlight Ответить