Не освобождается память после закрытия файлов.
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Не освобождается память после закрытия файлов.

Не освобождается память после закрытия файлов.

Ответ
Поиск в этой теме
Непрочитано 27.08.2013, 22:48 #1
Не освобождается память после закрытия файлов.
Comediant
 
Инженер-конструктор
 
Регистрация: 17.09.2009
Сообщений: 136

Собственно проблема в том что при открытии нескольких файлов (3-4 шт. по 3-8мб) автокад (2012) начинает виснуть и забивается вся оперативка (3,75 гб из 4 использует acad ). и работать становится мягко говоря не комфортно. Я понимаю что и файлы не лёгенькие, но вопрос в том что даже если закрыть их все кроме одного память всё равно остаётся загружена (на 3,75гб), пока не перезагрузить сам автокад. Есть ли решение этой проблемы(чтобы пропорционально освобождалась память при закрытии файлов).
__________________
Нет невыполнимой работы для человека, который не обязан делать ее сам. Закон Вейлера.
Просмотров: 5077
 
Непрочитано 28.08.2013, 00:21
#2
maratovich


 
Регистрация: 12.07.2009
г. Самара
Сообщений: 2,437
Отправить сообщение для maratovich с помощью Skype™


Вот это попробуйте, может поможет.
maratovich вне форума  
 
Непрочитано 28.08.2013, 20:12
#3
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от maratovich Посмотреть сообщение
Вот это
В чём заключается "автоматическая и ручная очистка памяти"?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 28.08.2013, 20:42
#4
maratovich


 
Регистрация: 12.07.2009
г. Самара
Сообщений: 2,437
Отправить сообщение для maratovich с помощью Skype™


Цитата:
Сообщение от hwd Посмотреть сообщение
В чём заключается "автоматическая и ручная очистка памяти"?
Автоматом по настройкам очищает или руками на кнопку нажать чтобы очистить.
maratovich вне форума  
 
Непрочитано 28.08.2013, 20:48
#5
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от maratovich Посмотреть сообщение
Автоматом по настройкам очищает или руками на кнопку нажать чтобы очистить.
Я об алгоритме. У тебя AutoCAD выжрал почти всю память (возможно это даже утечка). Каким образом ты определяешь, для каких адресов вызывать delete, или delete[] освобождая память (ну, или что там в делфи по аналогии с C\C++...)?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 28.08.2013, 20:57
#6
maratovich


 
Регистрация: 12.07.2009
г. Самара
Сообщений: 2,437
Отправить сообщение для maratovich с помощью Skype™


Цитата:
Сообщение от hwd Посмотреть сообщение
для каких адресов вызывать delete, или delete[] освобождая память (ну, или что там в делфи по аналогии...)?
Ну смотри чуть ниже, или для всех или только для автокада.
maratovich вне форума  
 
Непрочитано 28.08.2013, 21:23
#7
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Ты прикидываешься?
Цитата:
Сообщение от maratovich Посмотреть сообщение
Ну смотри чуть ниже, или для всех или только для автокада.
Т.е. ты в исходном коде своей программки так прямо текстом и пишешь:
Цитата:
Сообщение от фрагмент исходного кода
операционка, операционка, повернись к лесу задом, а ко мне передом освободи ка мне память "только для автокада"...
на что та и отвечает:
Цитата:
Сообщение от операционка
есть сэр!
и вуаля - чудо...
?
Или же всё-таки некий алгоритм (о котором я выше и спрашивал) имеется? Какова твоя программная логика освобождения памяти в подобном случае?

Понятное дело, что топикстартер хочет лечения по фотографии, иначе бы более чётко обозначил все исходные данные.

Однако сама возможность "освобождения памяти" в подобных случаях - вот это мне действительно интересно и, честно говоря, пока что вызывает большущие сомнения...

P.S. я ещё допускал бы возможность использования AcDbDatabase::reclaimMemoryFromErasedObjects, если бы чертежи не были закрыты, однако в данном случае это явно не тот случай
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 28.08.2013 в 21:37.
hwd вне форума  
 
Непрочитано 28.08.2013, 21:51
#8
maratovich


 
Регистрация: 12.07.2009
г. Самара
Сообщений: 2,437
Отправить сообщение для maratovich с помощью Skype™


Цитата:
Сообщение от hwd Посмотреть сообщение
я ещё допускал бы возможность использования AcDbDatabase::reclaimMemoryFromErasedObjects, если бы чертежи не были закрыты, однако в данном случае это явно не тот случай
1. А я и не говорил что это точно поможет.
2. Идет очистка у процесса (ов), а не у автокада и не его средствами.
3. Всю память очистить всё равно не получится.
4. Копай в строну Processes.ExecQuery("SELECT * FROM Win32_OperatingSystem", , 48)
maratovich вне форума  
 
Непрочитано 28.08.2013, 22:20
#9
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от maratovich Посмотреть сообщение
Всю память очистить всё равно не получится.
Да я бы сказал, что её вообще очистить не получится иначе, чем завершением процесса (насколько я понимаю).
Цитата:
Сообщение от maratovich Посмотреть сообщение
4. Копай в строну Processes.ExecQuery("SELECT * FROM Win32_OperatingSystem", , 48)
Найти-то нужные процесс - это как раз и не проблема... Только вот где твой WQL-запрос память освобождает?
Поиск в MSDN по фразе "Processes.ExecQuery" результатов не даёт. Несколько похожее здесь. Оно? Если это "оно", то похоже, что к освобождению памяти комбинация флагов wbemFlagForwardOnly и wbemFlagReturnImmediately дающая значение 48, никакого отношения не имеет (насколько я могу судить по мануалу). Поправь меня, если ошибаюсь...

Т.о. я пока так и не вижу, каким же образом ты память трамбуешь?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 28.08.2013, 22:31
#10
maratovich


 
Регистрация: 12.07.2009
г. Самара
Сообщений: 2,437
Отправить сообщение для maratovich с помощью Skype™


Цитата:
Сообщение от hwd Посмотреть сообщение
Поправь меня, если ошибаюсь
Я тебе дал направление в котором копать, дальше уж сам.
Цитата:
Сообщение от hwd Посмотреть сообщение
Т.о. я пока так и не вижу, каким же образом ты память трамбуешь?
Нажми Ctrl+Alt+Del и посмотри какая реакция процессов при очистке.
Автор спросил - ему ответили, о предоставлении исходного кода речь не шла и точно не пойдёт.
Тут главное чтобы автор отписался - помогло или нет.
maratovich вне форума  
 
Непрочитано 28.08.2013, 22:34
#11
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от maratovich Посмотреть сообщение
Я тебе дал направление в котором копать
ну-ну... У меня по данному "чуду техники" вопросов более нет...
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 04.09.2013, 13:12
#12
serbambr


 
Регистрация: 11.12.2012
Сообщений: 11


Помнится в ХР имеется проблема, что при закрытии приложения dll-ки автоматически не выгружаются из памяти (касается всех приложений). В пособиях по редактированию реестра оговаривался переменная, при изменении значения которой происходила выгрузка неиспользуемых dll из памяти через какой-то определенный период. Может быть в эту сторону капнуть?
Лет 7 назад, когда для меня были важны каждые 10 метров, я копался в этом - вроде помогало. Сейчас уже не знаю как это всё развито.
serbambr вне форума  
 
Непрочитано 04.09.2013, 13:26
#13
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от serbambr Посмотреть сообщение
Помнится в ХР имеется проблема, что при закрытии приложения dll-ки автоматически не выгружаются из памяти (касается всех приложений).
Я о подобном не читал. Насколько мне известно, при завершении процесса освобождаются все занимаемые им ресурсы, в т.ч. устраняется и утечка памяти, если она была в этом приложении.

P.S. Правда возможен ещё и такой вариант (совместное использование DLL). Т.е. если несколько приложений запросят загрузку одной и той же DLL, то операционка загружает её в память лишь один раз и не выгружает до тех пор, пока работает хотя бы один процесс, запросивший загрузку этой DLL (и не запросивший после этого её выгрузку). Очередной запрос на выгрузку DLL выполняет декрементацию счётчика референсов. У операционки, как я понимаю, своё подобие сборщика мусора. Если в какой-то момент времени свободной памяти уже не хватает, то прежде чем обратиться к файлу подкачки, сборщик проверяет референсы в загруженных ранее DLL и там, где количество ссылок равно 0, освобождает используемую ими память. Если освобождённой памяти хватает, то подкачка не используется. Т.е. проверка референсов и выгрузка DLL происходит не сразу, а по мере необходимости.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 04.09.2013 в 18:52.
hwd вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Не освобождается память после закрытия файлов.



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разработка ПОС, искусство проектирования 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