|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Не освобождается память после закрытия файлов.
Инженер-конструктор
Регистрация: 17.09.2009
Сообщений: 136
|
||
Просмотров: 5077
|
|
||||
Вот это попробуйте, может поможет.
|
||||
![]() |
|
||||
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Я об алгоритме. У тебя AutoCAD выжрал почти всю память (возможно это даже утечка). Каким образом ты определяешь, для каких адресов вызывать delete, или delete[] освобождая память (ну, или что там в делфи по аналогии с C\C++...)?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Ты прикидываешься?
Т.е. ты в исходном коде своей программки так прямо текстом и пишешь: Цитата:
Цитата:
? Или же всё-таки некий алгоритм (о котором я выше и спрашивал) имеется? Какова твоя программная логика освобождения памяти в подобном случае? Понятное дело, что топикстартер хочет лечения по фотографии, иначе бы более чётко обозначил все исходные данные. Однако сама возможность "освобождения памяти" в подобных случаях - вот это мне действительно интересно и, честно говоря, пока что вызывает большущие сомнения... ![]() P.S. я ещё допускал бы возможность использования AcDbDatabase::reclaimMemoryFromErasedObjects, если бы чертежи не были закрыты, однако в данном случае это явно не тот случай ![]()
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: Последний раз редактировалось hwd, 28.08.2013 в 21:37. |
||||
![]() |
|
||||
Цитата:
2. Идет очистка у процесса (ов), а не у автокада и не его средствами. 3. Всю память очистить всё равно не получится. 4. Копай в строну Processes.ExecQuery("SELECT * FROM Win32_OperatingSystem", , 48) |
||||
![]() |
|
||||
Да я бы сказал, что её вообще очистить не получится иначе, чем завершением процесса (насколько я понимаю).
Цитата:
Поиск в MSDN по фразе "Processes.ExecQuery" результатов не даёт. Несколько похожее здесь. Оно? Если это "оно", то похоже, что к освобождению памяти комбинация флагов wbemFlagForwardOnly и wbemFlagReturnImmediately дающая значение 48, никакого отношения не имеет (насколько я могу судить по мануалу). Поправь меня, если ошибаюсь... Т.о. я пока так и не вижу, каким же образом ты память трамбуешь?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Я тебе дал направление в котором копать, дальше уж сам.
Нажми Ctrl+Alt+Del и посмотри какая реакция процессов при очистке. Автор спросил - ему ответили, о предоставлении исходного кода речь не шла и точно не пойдёт. Тут главное чтобы автор отписался - помогло или нет. |
||||
![]() |
|
||||
ну-ну...
![]()
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: |
||||
![]() |
|
||||
Регистрация: 11.12.2012
Сообщений: 11
|
Помнится в ХР имеется проблема, что при закрытии приложения dll-ки автоматически не выгружаются из памяти (касается всех приложений). В пособиях по редактированию реестра оговаривался переменная, при изменении значения которой происходила выгрузка неиспользуемых dll из памяти через какой-то определенный период. Может быть в эту сторону капнуть?
Лет 7 назад, когда для меня были важны каждые 10 метров, я копался в этом - вроде помогало. Сейчас уже не знаю как это всё развито. |
|||
![]() |
|
||||
Цитата:
P.S. Правда возможен ещё и такой вариант (совместное использование DLL). Т.е. если несколько приложений запросят загрузку одной и той же DLL, то операционка загружает её в память лишь один раз и не выгружает до тех пор, пока работает хотя бы один процесс, запросивший загрузку этой DLL (и не запросивший после этого её выгрузку). Очередной запрос на выгрузку DLL выполняет декрементацию счётчика референсов. У операционки, как я понимаю, своё подобие сборщика мусора. Если в какой-то момент времени свободной памяти уже не хватает, то прежде чем обратиться к файлу подкачки, сборщик проверяет референсы в загруженных ранее DLL и там, где количество ссылок равно 0, освобождает используемую ими память. Если освобождённой памяти хватает, то подкачка не используется. Т.е. проверка референсов и выгрузка DLL происходит не сразу, а по мере необходимости.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome: Последний раз редактировалось hwd, 04.09.2013 в 18:52. |
||||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Разработка ПОС, искусство проектирования | Tyhig | Технология и организация строительства | 117 | 25.11.2021 17:38 |
Пропадают картинки после закрытия программы | Mariya_Space | AutoCAD | 13 | 16.06.2017 10:10 |
AutoCAD остаётся в памяти после закрытия | neky | AutoCAD | 9 | 09.06.2012 11:37 |
Не видно файлов после сохранения | modlen | AutoCAD | 6 | 09.05.2012 11:34 |
Невозможность изменения файла чертежа после его закрытия в Автокаде. Из-за чего!?!? | Botan | AutoCAD | 12 | 12.04.2009 05:27 |