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() прекрасно все сбрасывает.
Еще пример. Прилагается максовский файл для теста.
После применения скрипта (аттачит всю геометрию, затем удаляет полученный объект и пытается сбросить память):
(
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()
)
В диспетчере задач наблюдается такая картина:
Кто сталкивался, подскажите, пожалуйста, куда девается память?????
Ведь сцена пустая!!!
Доступ к резюме доступен только по пакетному доступу HR менеджерам зарегистрированных компаний. Узнать о вариантах корпоративных пакетов можно по ссылке.
Александр Якушев
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() прекрасно все сбрасывает.
Александр Якушев
После применения скрипта (аттачит всю геометрию, затем удаляет полученный объект и пытается сбросить память):
( 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() )В диспетчере задач наблюдается такая картина:Кто сталкивался, подскажите, пожалуйста, куда девается память?????
Ведь сцена пустая!!!
Вложения
Фигли