21.04.2006, 09:31 | #1 |
Участник
|
Критерий начала "сборки мусора"
Подскажите, пожалуйста, что это за критерий такой и как он влияет на сборку мусора. В help написано: Число открытых элементов до начала процедуры очичтки динамической памяти. Что в данном случае понимается по элементом?
|
|
21.04.2006, 13:40 | #2 |
Участник
|
Developer's Guide - Garbage collection limit
Цитата:
Number of application objects no longer in use.
MorphX automatically performs garbage collection when the number given here is reached. The system uses memory each time an application object is opened in the Application Object Tree. Unless a value is given here, application objects are never discarded from memory. Additional info: An application object is considered open when
An application object is subject to garbage collection when one of the above mentioned states have happened, and none of them are true any more. The next time a garbage collected application object is opened, it is reloaded from external storage to system memory. Note Garbage collection is one of the three components in an update cycle, and is performed only when an update cycle interval is given (the Auto-Update option).
__________________
Axapta v.3.0 sp5 kr2 |
|
21.04.2006, 14:01 | #3 |
Участник
|
2 AndyD
Это я уже видел. Из выше указанного не ясно как именно работает сборщик мусора - в каком случае объект считается не используемым? В общем интересен следующий вопрос: если в методе класса создается 1000 объектов другого класса когда занятая ими память будет освобождена и влияет ли выше указанный параметр на освобождение памяти? |
|
21.04.2006, 14:06 | #4 |
Moderator
|
Цитата:
Из выше указанного не ясно как именно работает сборщик мусора - в каком случае объект считается не используемым?
Более подробно про управление памятью в net можно почитать здесь: http://www.rsdn.ru/article/dotnet/GCnet.xml |
|
21.04.2006, 14:18 | #5 |
Участник
|
С Java и C# все ясно, но в X++ сдается мне что все не совсем так. Во-первых, обычно все объекты обычно наследуются (иногда неявно) от какого-то общего класса который управляет памятью. В X++, хотя методы new и finalize можно перекрыть (значит они имеются у класса предка), но метода super() они почему-то не содержат. Во-вторых, если требуется много памяти, то она после окончания работы класса Axapta, она освобождается не сразу, а через несколько минут. Возможно память освобождается средствами Windows (очистка неиспользуемых страниц), а не Axapta. Все это заставляет задуматься, как же все таки работает загадочный сборщик мусора в Axapta и можно ли управлять его работой.
|
|
21.04.2006, 14:27 | #6 |
Moderator
|
Цитата:
Во-вторых, если требуется много памяти, то она после окончания работы класса Axapta, она освобождается не сразу, а через несколько минут.
Цитата:
Возможно память освобождается средствами Windows (очистка неиспользуемых страниц), а не Axapta.
Если ошибаюсь - пусть меня поправят. |
|
21.04.2006, 14:29 | #7 |
Участник
|
Классы, формы и т.д. создаваемые динамически (т.е. в процессе выполнения кода, вызова MenuItems и т.д.) размещаются в области памяти SmartHeap (можно увидет в форме SysHeapCheck). Они удалются из памяти при явном освобождении или при выходе из области видимости. Сама использованная память возвращается в пул памяти SmartHeap и помечается как свободная. SmartHeap управляет памятью по своим алгоритмам. В Axapta есть класс для управления SmartHeap - HeapCheck. Один из его методов - shrinkpool() предназначен для освобождение неиспользованной памяти. Но не забывайте, что память может быть фрагментирована - по-этому эффект от его использования может быть незначительный.
Поищите на форме по SmartHeap - этот вопрос уже обсуждался
__________________
Axapta v.3.0 sp5 kr2 |
|
21.04.2006, 14:45 | #8 |
Участник
|
Что касается сабжевого параметра, то его предназначение - управление памятью, используемой AOT при работе со своими элементами - для каждого из них происходит выделение памяти при выполении с ними операций из приведенного мной списка.
После завершения работы с ними (т.е. сворачивания ветви, закрытия редактора и т.д.) эти объекты удаляются из памяти, если их кол-во доходит до этого параметра и пользователь (точнее разработчик) некоторое время (параметр Auto-Update) не выполняет никаких действий в системе.
__________________
Axapta v.3.0 sp5 kr2 |
|
21.04.2006, 19:02 | #9 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: alex55 (1). |
Теги |
сборка мусора, управление памятью |
|
|