Render.ru

Непонятно куда расходуется память

Александр Якушев

Активный участник
Рейтинг
7
#1
Вот небольшой пример:
Код:
asd = #()

for i = 1 to 1000 do( ts = Sphere radius:100; ts.material = Standardmaterial name:(uniquename "st_"); append asd ts;)

fn quickAttche arr = (
    numArr = arr.count
    arNewObj = #()
    if numArr > 1 then(
        for i = 1 to numArr by 2 do(
            if arr[i+1] != undefined then (
                meshop.attach (converttomesh arr[i]) (converttomesh arr[i+1]) attachMat:#IDToMat condenseMat:true
               
                gc()
                clearUndoBuffer()
               
                append arNewObj arr[i]
                ) else append arNewObj (converttomesh arr[i])
            )
        quickAttche arNewObj
        )else return arr[1]
    )
   
newObj = quickAttche asd
delete newObj
gc()
После выполения несколько десятков мегабайт ОЗУ куда-то резервируется. Итак, если несоклько сотен - тысяч операций, то память просто исчезает вникуда.
Обратно не возвращается даже после reset максовского файла.
Подскажите, пожалуйста, куда может расходоваться память ???

Никакие gc() не помогают. Хотя, если тоже делать вручную, то gc() прекрасно все сбрасывает.
 

Александр Якушев

Активный участник
Рейтинг
7
#2
Еще пример. Прилагается максовский файл для теста.
После применения скрипта (аттачит всю геометрию, затем удаляет полученный объект и пытается сбросить память):
Код:
(
disableSceneRedraw() -- thanks U.S.S. Speed!
displayColor.shaded = #object
asd = geometry as array
converttoMesh asd -- make unique


fn quickAttcheMesh arr = (
    numArr = arr.count
    arNewObj = #()
    if numArr > 1 then(
        for i = 1 to numArr by 2 do(
            if arr[i+1] != undefined then (
                    meshop.attach arr[i] arr[i+1] attachMat:#IDToMat condenseMat:true
                    append arNewObj arr[i]
                    ) else append arNewObj arr[i]
            )
                gc()
                freescenebitmaps()
                clearUndoBuffer()
        quickAttcheMesh arNewObj
        )else return arr[1]
    )
newObj = quickAttcheMesh asd
delete newObj
newObj = undefined
gc()
freescenebitmaps()
clearUndoBuffer()    
enableSceneRedraw()
completeRedraw()
)
В диспетчере задач наблюдается такая картина:

2015-06-16 14-54-49 Диспетчер задач Windows.png


Кто сталкивался, подскажите, пожалуйста, куда девается память?????
Ведь сцена пустая!!!
 

Вложения

Последнее редактирование:

Фигли

Пользователь сайта
Рейтинг
2
#3
Функции по идее должны быть всегда в самом начале, вне скрипта, вне циклов, вне скобок.
 
Сверху