Найти причину утечки памяти и устранить ее - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Возник вопрос: как ликвидировать утечку памяти (в течение работы программы одно только многократное нажатие на одну из кнопок увеличивает затраты памяти с 10 до 15мб)? Начал читать, наткнулся на следующее
Проверка наличия утечек Существует ряд признаков, по которым можно установить наличие утечек памяти в приложении. Одним из них является выдача исключения OutOfMemoryException (недостаточно памяти). Другой признак — это существенное замедление отклика из-за того, что происходит обмен с файлом подкачки (виртуальной памятью), расположенным на диске. Еще один признак — медленное (или не очень медленное) увеличение значения объема используемой памяти, которое можно посмотреть в диспетчере задач. Если появляются подозрения, что в приложении есть утечка памяти, то нужно прежде всего определить тип памяти, в котором эта утечка имеет место. Это позволит определить область памяти, на которой нужно сосредоточить внимание и усилия при отладке. Рекомендуется использовать монитор производительности и просматривать там следующие счетчики: Private Bytes (Байт исключительного пользования) в категории Process (Процесс), # Bytes in All Heaps (Байт во всех кучах) в категории .NET CLR Memory (Память CLR .NET) и # of current logical Threads (Текущих логических потоков) в категории .NET CLR LocksAndThreads (Блокировки и потоки CLR .NET). Счетчик Private Bytes из категории Process указывает объем памяти, выделенной исключительно для данного процесса; эта память не может использоваться другими процессами системы. Счетчик # Bytes in All Heaps из категории .NET CLR Memory указывает общий суммарный объем памяти, занятой поколениями Gen0, Gen1 и Gen2 и кучей больших объектов. Счетчик # of current logical Threads из категории .NET CLR LocksAndThreads указывает число логических потоков в AppDomain. Если число логических потоков неожиданно возрастает, то это значит, что в стеках потоков имеются утечки памяти. Если возрастает значение счетчика Private Bytes и при этом значение счетчика # Bytes in All Heaps остается неизменным, то это значит, что имеются утечки в неуправляемой памяти. Если возрастают значения обоих счетчиков, то это значит, что увеличивается объем памяти в управляемых кучах.
Что это за монитор производительности и как им пользоваться? И насколько это вообще эффективно?

Решение задачи: «Найти причину утечки памяти и устранить ее»

textual
Листинг программы
private void paintButton_Click(object sender, EventArgs e)
        {            
            clearPicture = false;
            Recalculate();
            int x, y; // Координаты точки
            int l = (int)numericUpDown1.Value;
 
            // Расчет
            list.Clear();
            list.Add(new Point(omega[0],omega[1])); // координаты начальной точки
            for (int i = 0; i < l; i++)
            {
                SortedSet<Point> templist = new SortedSet<Point>(new ComparePoints());
                foreach (Point point in list)
                    for (int j = 0; j < 10; j++)
                    {                        
                        x = Convert.ToInt32(C[j, 0] * point.X + C[j, 1] * point.Y + C[j, 4]);
                        y = Convert.ToInt32(C[j, 2] * point.X + C[j, 3] * point.Y + C[j, 5]);
                        templist.Add(new Point(x, y));
                    }
                list = templist;
            }
            MessageBox.Show(list.Count + "");
            pictureBox1.Invalidate();
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы