Как освободить память?

Новая тема
Показывать по 10 20 40 сообщений
В моей программе нужно просматривать большое количество документов. Заметила, что с течением времени она работает все медленнее. Такое впечатление, что просмотренные документы не удаляются из памяти и замедляют работу.
Можно ли как-то очищать память? Сначала думала что команда "УдалитьОбъекты" работает именно так, но, увы, она удаляет сами документы, а не их образы в памяти. Что вообще-то кажется мне совершенно нелогичным, ведь "СоздатьОбъект" именно образы создает.
А команды типа "ЗакрытьДокумент" я не нашла. Может кто знает какое-то решение?
>Сначала думала что команда "УдалитьОбъекты" работает именно так, но, увы, она удаляет
>сами документы, а не их образы в памяти. Что вообще-то кажется мне совершенно нелогичным,
>ведь "СоздатьОбъект" именно образы создает.
>
Советую хоть кратко ознакомиться с технологией COM объектов, что бы не было лишних вопросов.
Так как при создании объекта счётчик его использования = 1. Если дополнительно получили на него ссылку, то счётчик += 1.  Если прекратили использовать ссылку, то счётчик -=1
В конечном итоге, когда объект перестаёт использоваться, то он автоматически уничтожается.

Доэтому для того что бы быть уверенным, что объекты не остаются в памяти обнуляйте все ссылки на ненужные объекты.

Есть много методов оптимизации выполнения модулей. Даже, если не ошибаюсь, на диске ИТС видел рекомендации.

>А команды типа "ЗакрытьДокумент" я не нашла. Может кто знает какое-то решение?
>
Есть метод формы Закрыть(..)

Программа не работает на прямую с выделением/освобождением памяти. Не думаю что у неё свой менеджер памяти. Этим занимается система и она сама решает когда освободить память. Так как даже те же библиотеки dll, когда их программа выгружает они не сразу удаляются из памяти.

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

Спасибо, конечно, за рекомендации, но, понимаете ли, к программе их не пришьешь, а потому толку от них, увы, мало. :((
Что там когда у них автоматически закрывается я не знаю, но замедление просто катастрофическое.  

>Доэтому для того что бы быть уверенным, что объекты не остаются в памяти >обнуляйте все ссылки на ненужные объекты.

Это Вы про те переменные, которые присваиватся через "СоздатьОбъект"? Так они же в цикле автоматически переназначаются. И что?
А больше я никаких ссылок не создаю, как мне представляется.

Форму мне закрывать не надо.

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

Вот такое впечатление, что после некоторого времени работы система этим свапом и занимается. Долго и упорно. На разных машинах. Памяти там вообще-то вполне достаточно.


Вопрос остался. Кто-нибудь еще может чем-то поделиться?
Назначить фиксированный размер свопа (физическая память х 2), можно поставить какую нить утилитку с поддержкой командной строки в шедулер чтоб оптимизировал память, использовать минимум переменных и временных таблиц в коде...
>Это Вы про те переменные, которые присваиватся через "СоздатьОбъект"? Так они же в цикле автоматически
>переназначаются. И что?
>А больше я никаких ссылок не создаю, как мне представляется.
>
Если переназначаются, то старые удаляются.
И вообще не туда копаете. не там ищете. Документы просто так в памяти не остаются.
Смотрите алгоритм работы и как обрабатываются данные.
Проблема с замедлением работы именно в алгоритме.
Если не освобождается память после просмотра документа и последующего его закрытия, то попробуйте свернуть и через пару секунд развернуть окно программы. Если нужно одновременно держать множество документов открытыми, то ничего не поделаешь. Вообще очень странно, что 1С (кстати, 7-ка или 8-ка?) так вас "достает". При самых активных действиях пользователя с документами в 8-ке УПП еще не приходилось наблюдать выделение более 700М под процесс, а это при текущих ценах на оперативную память не такая уж и проблема (1Г памяти на компьютере почти норма).
Увы, как раз на практике в значительном числе "контор" есть нелепая "норма" где-то от силы 256 Мб оперативки для машины в сети. Даже если на ней стоит ХР-проф и еще Офис-2007.
И можно до-о-о-олго объяснять и бухам, и системщикам, и начальникам, что это - не дело и копеечный вопрос - решаться может тоже до-о-о-олго...

А то еще бывает экзотика - размер файла подкачки 0 !!!

И все недоумевают: чего это виснет 1-ска и пр...
Ну тогда нужно задать встречный вопрос Ульяне А. - сколько установлено оперативной памяти на вашем "суперзагруженном" компьютере?
> Ну тогда нужно задать встречный вопрос Ульяне А. - сколько установлено оперативной памяти на вашем "суперзагруженном" компьютере?


Тогда уж и еще вопрос - а сколько свободного места на СИСТЕМНОМ диске.

Тоже была мода пару-тройку лет назад: винч гигов на 70 "резали" на логические, да так, что системному оставляли 2-4 всего.... И еще туда же, в Program Files не только оболочку 1с запихивали, но и базы тоже...
Это Вы про те переменные, которые присваиватся через "СоздатьОбъект"? Так они же в цикле автоматически переназначаются. И что?
А сама оп. "СоздатьОбъект" у Вас, случайно, не в теле цикла (тем более документа конкретного вида)?
Читают тему
(гостей: 1)

Быстрый переход