|
1069 / 107 / 4
Регистрация: 19.12.2012
Сообщений: 458
|
|
Реальный пример медленного освобождения памяти21.05.2013, 14:18. Показов 1964. Ответов 7
Метки нет (Все метки)
Как-то в одной из первых своих тем на этом сайте писал про проблему с медленным освобождением памяти.
Сконструировал пример этой проблемы. Скачиваем, переходим в IDE, находим fStart, ставим т.останова(F9) на "End function" и жмем F5. После создания объектов, и переходе интерпритатора на "End function", готовимся ... жмем опять F5 и ловим кайф от освобождения памяти (смотрим в диспетчере задач, как винда назад скатывает память постепенно и очень очень медленно) ... "... подождите, подождите! не снимайте задачу! она через какое-то время сначала раскачается, сдуется и только потом остановится )" Количество объектов всего 1 000 000. А представьте, если объектов миллионов 5 ... а то и гораздо больше P.S. В данном примере объекты облегченные - без навеса обслуживающих функций, поэтому, вопрос реализации "а почему именно так?!" - будет требовать отдельной темы. Примите пожалуйста по факту, что и коллекции и счетчики - нужны ... (хотя ...) По идее (для тех кто посмотрел и в теме) - смысл оболочки(класса) "Node" будет понятен и вопросов не вызовет (по сути, это узлы графа со своими узлами и хранящейся информацией на самом узле). Коллеги, вопроса два - как сделать аналогичную оболочку на коллекшн и/или решить проблемы с текущей оболочкой (где будут - узлы и значения), чтобы: 1. экземпляр класса занимал меньше памяти 2. быстрее освобождалась память после работы скрипта Принимаю ЛЮБЫЕ варианты и реализации! кидайте идеи если будут - даже самые абсурдные! Буду ОЧЕНЬ признателен и благодарен.
0
|
|
| 21.05.2013, 14:18 | |
|
Ответы с готовыми решениями:
7
Пауза в цикле, для освобождения памяти Распределение памяти для выделения и освобождения блоков памяти внутри запрошенного пула Ошибка освобождения памяти |
|
1069 / 107 / 4
Регистрация: 19.12.2012
Сообщений: 458
|
|||||||||||||||||||||
| 22.05.2013, 16:17 [ТС] | |||||||||||||||||||||
Сообщение было отмечено Памирыч как решение
Решение
Спасибо Hedge-Hog за помощь и кое-какие идеи.
Поши дальше. Пишем:
Создем абсолютно пустой класс SomeClass (без единой строчки кода) Пишем:
Добавлено через 19 минут Идем дальше. Пишем:
Вывод - VBA(или Collection) мягко говоря не любит свои классы. за что(почему) ?! - не понятно! Добавлено через 21 минуту Идем еще дальше:
Вывод: причина не в Collection, а в VBA!
0
|
|||||||||||||||||||||
|
1069 / 107 / 4
Регистрация: 19.12.2012
Сообщений: 458
|
|
| 23.05.2013, 18:37 [ТС] | |
|
1. Как можно добраться до GC или Dispose? Уверен, что возможность есть. Кто знает, может есть какой скрытый метод?
2. Как можно сгенерить исключение в коде, которое бы прекращало бы работу программы. Причем, исключение такое, которое не просто аккуратно и корректно заканчивает работу программы (им. ввиду VBA), а вышибает (без вывода на экран сообщений об ошибке)? Мусорщик бы потом просто собрал всю резервированную память. Такие исключения бывают - могу сказать точно т.к. с такими проблемами встречался, но не могу вспомнить где и с чем. 3. Можно создать на глобальном уровне "контейнер", куда при завершении работы программы (очередной итерации вызова того или иного скрипта) сваливать использованные экземпляры классов. При этом, повесить на таймер функцию, которая бы постепенно разбирала эту кучу и ориентировалась на потребление приложением процессорного времени. В связку с ней в конструкторы всех используемых классов повесить обработчики, которые бы проверяли - если куча достигла какого-то установленного предела - то устанавливался бы флаг форсированной разборки этой кучи, пока точка предела опять-таки не опустится ниже какого-то предела. сложно? нет, не сложно, но д.быть что-то красивее.
0
|
|
|
1069 / 107 / 4
Регистрация: 19.12.2012
Сообщений: 458
|
|
| 24.05.2013, 12:41 [ТС] | |
|
Скачиваем. Открываем. Запускаем НИЧЕГО НЕ ИЗМЕНЯЯ В КОДЕ!!! - qwe2 и qwe3. Удивляемся.
Попробуйте это объяснить.
0
|
|
|
1069 / 107 / 4
Регистрация: 19.12.2012
Сообщений: 458
|
|
| 06.06.2013, 09:33 [ТС] | |
|
Спасибо anny05 за помощь. Проблемы с памятью и классами были решены. Тема закрыта.
0
|
|
|
0 / 0 / 0
Регистрация: 13.03.2016
Сообщений: 2
|
|
| 13.03.2016, 13:17 | |
|
Поделитесь решением?
0
|
|
|
1069 / 107 / 4
Регистрация: 19.12.2012
Сообщений: 458
|
|
| 14.03.2016, 10:28 [ТС] | |
|
Решения нет. И не было. Уважаемый коллега был согласен поделиться своим решением только при условии, если я напишу данное сообщение. Сообщение написал, но решение коллеги оказалось не рабочим.
Решение многих задач, которые требуют использование структуры связанных (в форме дерева) данных (которые традиционно решаются использованием объектной модели), имеется. Добавлено через 5 минут Обращу ваше внимание еще раз - решения проблем, освобождения памяти при работе с классами - нет. Вернее, иногда при освобождении памяти программа работала быстро, но как этого достичь и из-за чего или благодаря каким манипуляциям - выяснить не удалось. Если ДЕЙСТВИТЕЛЬНО интересно альтернативное решение с целью решения каких-то ваших бизнес-задач, пишите. Поделюсь.
0
|
|
|
0 / 0 / 0
Регистрация: 13.03.2016
Сообщений: 2
|
|
| 14.03.2016, 19:43 | |
|
Цель, конечно, решение бизнес-задач и альтернативу посмотреть было бы в любом случае интересно.
Но если это уход от классов в сторону массивов и структур, то вряд ли подойдёт.
0
|
|
| 14.03.2016, 19:43 | |
|
Помогаю со студенческими работами здесь
8
Реальный пример MVC
Стратегия выделения/освобождения памяти Malloc ошибка освобождения памяти Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 31.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 30.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|