Заказ звонка

Закрыть

*
*
*

Высвобождение объекта из памяти при помощи Nothing

Страницы: 1
RSS
Высвобождение объекта из памяти при помощи Nothing
Здравствуйте. Я недавно столкнулся с одной проблемой. После освобождения объектных при помощи Nothing, я заметил что пространство в памяти не освобождается. Т.е. при использование цикла на много итераций объекты накапливаются в памяти, "раздувая" процесс TCS свыше 100 МБ при использовании "тяжелых" объектов, например SinglNmkFromId, или многократном прогоне циклов с более легкими объектами. И это все несмотря на то, что после каждого использования объекта я очищаю его Set ObjName = Nothing. Т.к. я работаю на достаточно слабой машине бывает, что на очередной запуск скрипта уже не хватает памяти, приходится перезагружать программу.
Всё правильно, объекты, созданные от TCSApp не освобождают память при помощи Set ObjName = Nothing.
Вот здесь некоторые пояснения по этой теме.
И ещё вот в документации.
Спасибо, разобрался.
---------------------------------------------------------------------------------------------
Хм... Хотя не совсем. Приведу фрагмент процедуры, который "раздувает" процесс в памяти. Я новичок в написании скриптов, и, возможно, что-то делаю не правильно. Но вроде бы здесь используются объекты только "2-го типа", т.е. полученные как зависимые, и вроде бы достаточно очистить их словом Nothing. Но процесс продолжает разбухать. В чем моя ошибка?
-------------------------------------------------------------------------------------------
Код
Set NmkUsd = TCSActiveModule.ChildModules.ModuleByName("WhereUsed_Nomenklature").AsIDispatch
    If Not NmkUsd Is Nothing Then
        Set NmkUsdTTP = NmkUsd.ChildModules.ModuleByName("WhereUsed_Nomenklature_in_tech_proc").AsIDispatch
        If Not NmkUsdTTP Is Nothing Then
            NmkUsdTTP.First
            Do While Not NmkUsdTTP.EOF
                Count = Count+1    
                NmkUsdTTP.Next
            Loop
            NmkUsdTTP.First
            Do While Not NmkUsdTTP.EOF
                c=c+1 X 
                Percent = CInt(c*100/Count)
                ProgressMsg = TCSApp.ShowProgressMessage(Percent & "%","")
                el = NmkUsdTTP.Properties("NMK_ID").AsInteger
                Ver_Id = NmkUsdTTP.Properties("VER_ID").AsInteger
                If Not SearchDouble2(ArrayOfNmk,i,Ver_Id,3) And el<>Id Then
                    i=i+1
                    ArrayOfNmk(i,1) = el
                    ArrayOfNmk(i,3) = Ver_Id
                    Set Nmk = NmkUsdTTP.ChildModules.ModuleByName("SingleNomencalture").AsIDispatch
                    If Not Nmk Is Nothing Then
                        ArrayOfNmk(i,2) = Nmk.Properties("NMK_CLASSIF_TYPE_ID").AsInteger
                    End If
                    Set Nmk = Nothing
                End If 
                NmkUsdTTP.Next
            Loop
        End If
        Set NmkUsdTTP = Nothing        
    End If
    Set NmkUsd = Nothing

-----------------------------------------------------------------------------------------------
'Функция SearchDouble2 не создает объектов.
Изменено: Александр Силкин - 13.12.2010 16:59:20
Страницы: 1
Читают тему (гостей: 1, пользователей: 0, из них скрытых: 0)