На нашем сайте мы используем cookie для сбора информации технического характера и обрабатываем IP-адрес вашего местоположения. Продолжая использовать этот сайт, вы даете согласие на использование файлов cookies. Здесь вы можете узнать, как мы пользуемся файлами cookies.
Я согласен
логотип upread.ru

Оптимизация программ


Я уже довольно давно занимаюсь созданием программ на заказ, но вот оптимизировать их приходится не так уж часто. Нас разбаловали увеличивающиеся мощности компьютеров, со все большей оперативной памятью и ядрами процессора. Однако, иногда все же приходится оптимизировать программу или делать изначально приложение, которое будет работать в ограниченных условиях.

Вот, например, недавний мой проект – создание приложения для фотостудии по приему фото в печать. Программа отлично работает, все в порядке, но вот память есть как не в себя. Потребление возрастает буквально с каждой минутой на десятки мегабайт – а это немало! Почему? Начинаем разбираться.



Признаюсь, первой моей мыслью было установить какие-нибудь жесткие ограничения для приложения на потребляемую оперативную память – и пусть оно там само выкручивается: запускает сборщик мусора, к примеру. Однако, это не очень хороший выход, а совсем даже плохой, так делать нельзя. А как надо делать? Надо оптимизировать код, искать те места, в которых и происходит увеличение потребления ресурсов.

В нашем случае место нашлось быстро: скачок потребления оперативной памяти происходил при перелистывании страниц с изображениями. За это отвечает метод button1_Click:

      private void button1_Click(object sender, EventArgs e)
        {
            for (int i = indikator; i < indikator + 6; i++) {
                if (i < chislo_files)
                {
                    lb[i].Visible = false;
                    pb[i].Visible = false;
                     for (int j = 0; j < сhislo_format_bumagi; j++)
                    {
                    nd[i, j].Visible = false;
                    metk[i, j].Visible = false;
                     }
                }
            }
            indikator = indikator + 6;
            if (indikator >= chislo_files) indikator = 0;
            for (int i = indikator; i < indikator + 6; i++)
            {
                if (i < chislo_files)
                {
                    CopyFiles(folder, Path2Folder(temp_folder), i);
                    Bitmap image1 = new Bitmap(temp_folder + "\\" + mass[i]);
                    pb[i].Image = image1;
                    lb[i].Visible = true;
                    pb[i].Visible = true;
                    for (int j = 0; j < сhislo_format_bumagi; j++)
                    {
                        nd[i, j].Visible = true;
                        metk[i, j].Visible = true;
                    }
                }
            }
            label3.Text = (indikator/6 +1).ToString();
        }
Очевидно, что потребление памяти происходит в этих строках:

Bitmap image1 = new Bitmap(temp_folder + "\\" + mass[i]);
pb[i].Image = image1;
Но от этого нам никак не избавиться – изображения надо выводить. Логично предположить, что можно уничтожить предыдущие – они же нам все равно не нужны. Сказано – сделано. Добавляем строку в предыдущий цикл:

pb[i].Image.Dispose();
И – вуаля – приложение ест только 20-30 Мб всегда, независимо от того, листаем мы страницы или нет.



Итак, если вам надо создать программу на заказ или оптимизировать уже имеющуюся – обращайтесь. При наличии четкого или не очень ТЗ в первом случае и исходного кода во втором - вам с удовольствием помогу. У меня опыт работы создания приложений не только для студентов (курсовые и дипломные), но и программ, которые задействованы в повседневной работе. В основном это многочисленные помощники, различные парсеры и грабберы или программы по расчету значений позволяющие избавить вас от рутинной работы.



тегизаметки, создание программ, си шарп, оптимизация, утечки памяти





Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Java и MySQL
Создание и отправка скриншота на почту на си шарп


© upread.ru 2013-2019
При перепечатке активная ссылка на сайт обязательна.
Задать вопрос
письмо
Здравствуйте! Вы можете задать мне любой вопрос. Если не получается отправить сообщение через эту форму, то пишите на почу up777up@yandex.ru
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.