|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
23.07.2015, 14:52 | #1 |
Пользователь
Регистрация: 16.07.2015
Сообщений: 31
|
Не будет ли в данном случае многократное использование оператора new плохо сказываться на работе программы
Здравствуйте, хотел уточнить, не будет ли в данном случае многократное использование
оператора new плохо сказываться на работе программы. Имеется цикл do while c частотой 10 раз в секунду. 1. Первый вариант Bitmap * F_Bitmap; gdiBitmapData - это ссылка на массив пикселей. Он периодически меняет значения. Color TheColor; //Цвет int IMAGE_W = 800; // Ширина изображения в пикселях IMAGE_W = 600; // Высота изображения в пикселях Код:
Но есть способ делать так: 2. Второй вариант Код:
Как думаете по производительности будет ли разница меду способами 1 и 2 ? Если постоянно делаю new Bitmap, то памяти не будет больше потребляться, чем в варианте 2 ? Вообще после new память освобождается? |
23.07.2015, 15:56 | #2 | |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,709
|
Цитата:
|
|
23.07.2015, 16:59 | #3 |
Пользователь
Регистрация: 16.07.2015
Сообщений: 31
|
Спасибо, то есть получается что после
F_Bitmap = new Bitmap(800,600,stride_size,f_format ,gdiBitmapData); память ранее выделенная под F_Bitmap остается в оперативной памяти программы и оперативная память постоянно растет? А если я буду делать в цикле так, это нормально? if(F_Bitmap) delete F_Bitmap; F_Bitmap = new Bitmap(800,600,stride_size,f_format ,gdiBitmapData); А по производительности эти два варианта как-то будут отличаться? |
23.07.2015, 18:06 | #4 |
Форумчанин
Регистрация: 30.06.2015
Сообщений: 353
|
На чём пишете? Что есть Bitmap? А то вот такая штука бывает: http://www.vsokovikov.narod.ru/New_M...bitmapbits.htm
|
23.07.2015, 18:31 | #5 | |
gamer
Участник клуба
Регистрация: 09.05.2015
Сообщений: 1,529
|
Если есть new - должен быть delete.
Цитата:
мой канал на Ютубе: youtube.com/@games-zz3ju/videos/
мой канал на Рутубе: rutube.ru/channel/31423139/videos/ В ожидании Кеши... |
|
23.07.2015, 20:04 | #6 |
Форумчанин
Регистрация: 01.06.2015
Сообщений: 497
|
F_Bitmap - это просто указатель на объект класса Bitmap, если мы его изменим, предварительно не сохранив куда-то, чтоб потом можно было освободить память через delete, то будет утечка.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
|
23.07.2015, 21:03 | #7 |
Пользователь
Регистрация: 16.07.2015
Сообщений: 31
|
Спасибо всем. Это просто для примера все.
Я понял, что если есть new, то должен быть delete. Но использование в цикле new .... delete это не есть хороший стиль, если имеются альтернативные варианты или же это нормальная практика? Тут суть в том, что в ЦИКЛЕ либо 1). методами класса перезаписывать массив-переменную класса, либо 2). создавать через new c предварительным delete объект класса, с передачей в него уже готового массива-переменной. Является ли вариант 2 не приемлемым? Или не хорошим стилем. Или это все мелочи, и то и то нормально?) Последний раз редактировалось robix; 23.07.2015 в 21:06. |
23.07.2015, 22:00 | #8 |
Форумчанин
Регистрация: 01.06.2015
Сообщений: 497
|
Если Вы просто загружаете изображение в Bitmap, то переписывать попиксельно тут не вариант (можете сами проверить, сколько по времени занимает один вариант и второй вариант). В классе Bitmap должны быть методы, которые позволяют загружать изображение целиком, не думаю, что только конструктор позволяет это сделать.
Но я так и не понял, какое отношение к этому всему имеет new и delete?
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
|
23.07.2015, 22:18 | #9 | ||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Какова цель таких действий? Для чего тебе это понадобилось? Может лучше использовать какой-нибудь ImageList для кучи картинок? Цитата:
А пока непонятно что тебе надо, но работа попиксельно будет медлительна.
I'm learning to live...
|
||
24.07.2015, 08:37 | #10 |
gamer
Участник клуба
Регистрация: 09.05.2015
Сообщений: 1,529
|
Как только объект не нужен становится и указатель на него теряется, следует использовать delete.
Если уж совсем непонятно, можно создать "временный" указатель, копировать туда основной, а на следующей итерации цикла удалять старый объект через "временный" указатель. Но это такой способ, когда уж совсем ничего не помогает.
мой канал на Ютубе: youtube.com/@games-zz3ju/videos/
мой канал на Рутубе: rutube.ru/channel/31423139/videos/ В ожидании Кеши... |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
нужен ли RAII в данном случае | pproger | Общие вопросы C/C++ | 3 | 01.12.2012 20:15 |
Как работает fwrite() в данном случае ? | Sergey S | Общие вопросы C/C++ | 2 | 30.05.2012 07:22 |
Непонятно: зачем делать декларацию функции в данном случае? | Oleg_SK | Общие вопросы C/C++ | 0 | 17.07.2010 09:36 |
использование условного оператора в теле оператора цикла с условием | машко | Помощь студентам | 2 | 21.06.2009 23:55 |
Delphi, рекурсия, как сделать все возможные N-ки чисел (сколько столбцов такая N-ка,в данном случае 3)? | domik | Помощь студентам | 5 | 26.09.2007 16:43 |