Оптимизация программ
Я уже довольно давно занимаюсь созданием программ на заказ, но вот оптимизировать их приходится не так уж часто. Нас разбаловали увеличивающиеся мощности компьютеров, со все большей оперативной памятью и ядрами процессора. Однако, иногда все же приходится оптимизировать программу или делать изначально приложение, которое будет работать в ограниченных условиях.
Вот, например, недавний мой проект – создание приложения для фотостудии по приему фото в печать. Программа отлично работает, все в порядке, но вот память есть как не в себя. Потребление возрастает буквально с каждой минутой на десятки мегабайт – а это немало! Почему? Начинаем разбираться.
Признаюсь, первой моей мыслью было установить какие-нибудь жесткие ограничения для приложения на потребляемую оперативную память – и пусть оно там само выкручивается: запускает сборщик мусора, к примеру. Однако, это не очень хороший выход, а совсем даже плохой, так делать нельзя. А как надо делать? Надо оптимизировать код, искать те места, в которых и происходит увеличение потребления ресурсов.
В нашем случае место нашлось быстро: скачок потребления оперативной памяти происходил при перелистывании страниц с изображениями. За это отвечает метод 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, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Программы на заказ
Отзывы
Контакты