Как освободить память?
19.08.2008
22:09
#1
В моей программе нужно просматривать большое количество документов. Заметила, что с течением времени она работает все медленнее. Такое впечатление, что просмотренные документы не удаляются из памяти и замедляют работу.
Можно ли как-то очищать память? Сначала думала что команда "УдалитьОбъекты" работает именно так, но, увы, она удаляет сами документы, а не их образы в памяти. Что вообще-то кажется мне совершенно нелогичным, ведь "СоздатьОбъект" именно образы создает.
А команды типа "ЗакрытьДокумент" я не нашла. Может кто знает какое-то решение?
Можно ли как-то очищать память? Сначала думала что команда "УдалитьОбъекты" работает именно так, но, увы, она удаляет сами документы, а не их образы в памяти. Что вообще-то кажется мне совершенно нелогичным, ведь "СоздатьОбъект" именно образы создает.
А команды типа "ЗакрытьДокумент" я не нашла. Может кто знает какое-то решение?
20.08.2008
05:28
#2
>Сначала думала что команда "УдалитьОбъекты" работает именно так, но, увы, она удаляет
>сами документы, а не их образы в памяти. Что вообще-то кажется мне совершенно нелогичным,
>ведь "СоздатьОбъект" именно образы создает.
>
Советую хоть кратко ознакомиться с технологией COM объектов, что бы не было лишних вопросов.
Так как при создании объекта счётчик его использования = 1. Если дополнительно получили на него ссылку, то счётчик += 1. Если прекратили использовать ссылку, то счётчик -=1
В конечном итоге, когда объект перестаёт использоваться, то он автоматически уничтожается.
Доэтому для того что бы быть уверенным, что объекты не остаются в памяти обнуляйте все ссылки на ненужные объекты.
Есть много методов оптимизации выполнения модулей. Даже, если не ошибаюсь, на диске ИТС видел рекомендации.
>А команды типа "ЗакрытьДокумент" я не нашла. Может кто знает какое-то решение?
>
Есть метод формы Закрыть(..)
Программа не работает на прямую с выделением/освобождением памяти. Не думаю что у неё свой менеджер памяти. Этим занимается система и она сама решает когда освободить память. Так как даже те же библиотеки dll, когда их программа выгружает они не сразу удаляются из памяти.
И если оперативной памяти достаточно, то никаких замедлений не должно чуствоваться. иначе свап на диск идёт.
>сами документы, а не их образы в памяти. Что вообще-то кажется мне совершенно нелогичным,
>ведь "СоздатьОбъект" именно образы создает.
>
Советую хоть кратко ознакомиться с технологией COM объектов, что бы не было лишних вопросов.
Так как при создании объекта счётчик его использования = 1. Если дополнительно получили на него ссылку, то счётчик += 1. Если прекратили использовать ссылку, то счётчик -=1
В конечном итоге, когда объект перестаёт использоваться, то он автоматически уничтожается.
Доэтому для того что бы быть уверенным, что объекты не остаются в памяти обнуляйте все ссылки на ненужные объекты.
Есть много методов оптимизации выполнения модулей. Даже, если не ошибаюсь, на диске ИТС видел рекомендации.
>А команды типа "ЗакрытьДокумент" я не нашла. Может кто знает какое-то решение?
>
Есть метод формы Закрыть(..)
Программа не работает на прямую с выделением/освобождением памяти. Не думаю что у неё свой менеджер памяти. Этим занимается система и она сама решает когда освободить память. Так как даже те же библиотеки dll, когда их программа выгружает они не сразу удаляются из памяти.
И если оперативной памяти достаточно, то никаких замедлений не должно чуствоваться. иначе свап на диск идёт.
20.08.2008
20:22
#3
Спасибо, конечно, за рекомендации, но, понимаете ли, к программе их не пришьешь, а потому толку от них, увы, мало.
(
Что там когда у них автоматически закрывается я не знаю, но замедление просто катастрофическое.
>Доэтому для того что бы быть уверенным, что объекты не остаются в памяти >обнуляйте все ссылки на ненужные объекты.
Это Вы про те переменные, которые присваиватся через "СоздатьОбъект"? Так они же в цикле автоматически переназначаются. И что?
А больше я никаких ссылок не создаю, как мне представляется.
Форму мне закрывать не надо.
>И если оперативной памяти достаточно, то никаких замедлений не должно >чуствоваться. иначе свап на диск идёт.
Вот такое впечатление, что после некоторого времени работы система этим свапом и занимается. Долго и упорно. На разных машинах. Памяти там вообще-то вполне достаточно.
Вопрос остался. Кто-нибудь еще может чем-то поделиться?
Что там когда у них автоматически закрывается я не знаю, но замедление просто катастрофическое.
>Доэтому для того что бы быть уверенным, что объекты не остаются в памяти >обнуляйте все ссылки на ненужные объекты.
Это Вы про те переменные, которые присваиватся через "СоздатьОбъект"? Так они же в цикле автоматически переназначаются. И что?
А больше я никаких ссылок не создаю, как мне представляется.
Форму мне закрывать не надо.
>И если оперативной памяти достаточно, то никаких замедлений не должно >чуствоваться. иначе свап на диск идёт.
Вот такое впечатление, что после некоторого времени работы система этим свапом и занимается. Долго и упорно. На разных машинах. Памяти там вообще-то вполне достаточно.
Вопрос остался. Кто-нибудь еще может чем-то поделиться?
21.08.2008
23:08
#4
Назначить фиксированный размер свопа (физическая память х 2), можно поставить какую нить утилитку с поддержкой командной строки в шедулер чтоб оптимизировал память, использовать минимум переменных и временных таблиц в коде...
22.08.2008
05:55
#5
>Это Вы про те переменные, которые присваиватся через "СоздатьОбъект"? Так они же в цикле автоматически
>переназначаются. И что?
>А больше я никаких ссылок не создаю, как мне представляется.
>
Если переназначаются, то старые удаляются.
И вообще не туда копаете. не там ищете. Документы просто так в памяти не остаются.
Смотрите алгоритм работы и как обрабатываются данные.
Проблема с замедлением работы именно в алгоритме.
>переназначаются. И что?
>А больше я никаких ссылок не создаю, как мне представляется.
>
Если переназначаются, то старые удаляются.
И вообще не туда копаете. не там ищете. Документы просто так в памяти не остаются.
Смотрите алгоритм работы и как обрабатываются данные.
Проблема с замедлением работы именно в алгоритме.
22.08.2008
16:30
#6
Если не освобождается память после просмотра документа и последующего его закрытия, то попробуйте свернуть и через пару секунд развернуть окно программы. Если нужно одновременно держать множество документов открытыми, то ничего не поделаешь. Вообще очень странно, что 1С (кстати, 7-ка или 8-ка?) так вас "достает". При самых активных действиях пользователя с документами в 8-ке УПП еще не приходилось наблюдать выделение более 700М под процесс, а это при текущих ценах на оперативную память не такая уж и проблема (1Г памяти на компьютере почти норма).
23.08.2008
13:39
#7
Увы, как раз на практике в значительном числе "контор" есть нелепая "норма" где-то от силы 256 Мб оперативки для машины в сети. Даже если на ней стоит ХР-проф и еще Офис-2007.
И можно до-о-о-олго объяснять и бухам, и системщикам, и начальникам, что это - не дело и копеечный вопрос - решаться может тоже до-о-о-олго...
А то еще бывает экзотика - размер файла подкачки 0 !!!
И все недоумевают: чего это виснет 1-ска и пр...
И можно до-о-о-олго объяснять и бухам, и системщикам, и начальникам, что это - не дело и копеечный вопрос - решаться может тоже до-о-о-олго...
А то еще бывает экзотика - размер файла подкачки 0 !!!
И все недоумевают: чего это виснет 1-ска и пр...
25.08.2008
08:25
#8
Ну тогда нужно задать встречный вопрос Ульяне А. - сколько установлено оперативной памяти на вашем "суперзагруженном" компьютере?
25.08.2008
20:50
#9
> Ну тогда нужно задать встречный вопрос Ульяне А. - сколько установлено оперативной памяти на вашем "суперзагруженном" компьютере?
Тогда уж и еще вопрос - а сколько свободного места на СИСТЕМНОМ диске.
Тоже была мода пару-тройку лет назад: винч гигов на 70 "резали" на логические, да так, что системному оставляли 2-4 всего.... И еще туда же, в Program Files не только оболочку 1с запихивали, но и базы тоже...
Тогда уж и еще вопрос - а сколько свободного места на СИСТЕМНОМ диске.
Тоже была мода пару-тройку лет назад: винч гигов на 70 "резали" на логические, да так, что системному оставляли 2-4 всего.... И еще туда же, в Program Files не только оболочку 1с запихивали, но и базы тоже...
Читают тему
(гостей: 1)