Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 33 / 5
Регистрация: 01.12.2017
Сообщений: 707
1

Как удалить лишние данные из оперативной памяти?

29.05.2018, 19:53. Показов 1148. Ответов 3

Author24 — интернет-сервис помощи студентам
Здравствуйте. Имеется вот такой код, вернее часть него:
C++
1
2
3
4
5
6
7
8
9
if( GetKeyState(32) & 0x8000 ) {
         hdc = GetDC(hWnd);
     hBitmap = (HBITMAP)LoadImage(NULL, TEXT("1.bmp"), IMAGE_BITMAP,
            0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
    GetObject(hBitmap, sizeof(bm), &bm);
        BitBlt(hdc, 100, 48, bm.bmWidth, bm.bmHeight, memBit, 0, 0, SRCCOPY);
        memBit = CreateCompatibleDC(hdc);
       SelectObject(memBit, hBitmap);
     }
Это код программы, которая после нажатия пробела ищет 1.bmp и вставляет его в окно программы. Проблема в том, что после многократного нажима потребление оперативной памяти слишком большое, которое, на мой взгляд, не должно быть. Использовал функцию DeleteObject и delete, но тщетно. Может, я просто неправильно их написал? Заранее спасибо за ответ.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.05.2018, 19:53
Ответы с готовыми решениями:

Как считать данные с оперативной памяти?
Здравствуйте. На днях захотел сделать свой "артмани" на с#, но увы гугл не помог мне в этом...

Asus X550C в биос "лишние" 4GB оперативной памяти
Здравствуйте, подогнали мне нерабочий ноут асус х550с, не запускался он из за пробитого мосфета...

Данные из оперативной памяти
Подскажите пожалуйста, как нам перехватить данные любого приложения, которые "уходят" в оперативную...

Хранить данные в оперативной памяти
есть два класса , нужно хранить общие данные, при чём хранить и изменять быстро, пробывал делать...

3
0 / 33 / 5
Регистрация: 01.12.2017
Сообщений: 707
31.05.2018, 18:15  [ТС] 2
Тема актуальна!
0
2376 / 834 / 317
Регистрация: 10.02.2018
Сообщений: 1,968
31.05.2018, 19:22 3
Нужно очищать все GDI объекты после создания или создавать их единожды.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
if( GetKeyState(32) & 0x8000 ) {
         hdc = GetDC(hWnd);
         hBitmap = (HBITMAP)LoadImage(NULL, TEXT("1.bmp"), IMAGE_BITMAP,
            0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
        GetObject(hBitmap, sizeof(bm), &bm);
        memBit = CreateCompatibleDC(hdc);
        HBITMAP old = (HBITMAP)SelectObject(memBit, hBitmap);
        BitBlt(hdc, 100, 48, bm.bmWidth, bm.bmHeight, memBit, 0, 0, SRCCOPY);
        SelectObject(memBit, old); // SelectObject - возврат в HDC прежнего объекта, даже если он 0
        DeleteDC(memBit); // CreateCompatibleDC - созданный DC нужно уничтожить
        DeleteObject(hBitmap); // LoadImage(IMAGE_BITMAP) - загруженную картинку нужно удалить
        ReleaseDC(hdc); // GetDC - полученный DC окна нужно освободить
     }
1
0 / 33 / 5
Регистрация: 01.12.2017
Сообщений: 707
01.06.2018, 10:01  [ТС] 4
Ygg, большое спасибо Вам за ответ. Потребление ОП значительно снизилось, но всё равно растёт, однако мне кажется, что это норма, ведь в Paint тоже растёт.
0
01.06.2018, 10:01
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.06.2018, 10:01
Помогаю со студенческими работами здесь

Как удалить данные формы из памяти?
По клику на кнопку класса .moderation_btn срабатывает отправка формы без перезагрузки страницы: ...

Удалить пустые строки и лишние данные из файла
Привет всем. Часто бывает, что нужно отпарсить текстовый файл. Удалить пустые строки, удалить...

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

Считать байты с параллельного порта В и если данные изменились, сохранить их в ячейке оперативной памяти
Добрый день.AT90S8535 Нужно написать программу для мк,которая по прерыванию события сравнения А...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru