2015-02-03 2 views
0

Как это влияет на эффективность в Maxscript ?. Maxscript - медленный, но мне интересно, на сколько это влияет?Пройти сравнение стоимости/сравнения в Maxscript?

Я пробовал этот скрипт, потребовалось много времени для выполнения операций в массиве, но позже вызов функций быстро возвращался 0 к разнице во времени (я пробовал очень высокий счетчик элементов в массиве) ,

fn testear lista = 
(
    a = 1 + 2 
) 

fn testear2 &lista = 
(
    a = 1 + 2 
) 

fn inicio = 
(
    lista = #() 

    for i = 1 to 1000000 do 
    (
     append lista "hola" 
    ) 

    strTime = timeStamp() 
    testear(lista) 
    endTime = timeStamp() 
    format "\ninicio % final % -> diferencia %\n" strTime endTime (endTime - strTime) 

    strTime = timeStamp() 
    testear2(&lista) 
    endTime = timeStamp() 
    format "\ninicio % final % -> diferencia %\n" strTime endTime (endTime - strTime) 

    for i = 1 to lista.count do 
     deleteItem lista 1 

) 

inicio() 

ответ

0

Если вы передаете массив функции, он автоматически передается в качестве ссылки. Эти две функции делают то же самое. Попробуйте это:

fn test1 arr = (
    arr[1] = "test1" 
) 
fn test2 &arr = (
    arr[1] = "test2" 
) 
fn init = (
    testArray = #(1,2,3,4,5,6,7,8,9,0) 
    format "Test #1: %\n" testArray 
    test1 testArray 
    format "Test #2: %\n" testArray 
    test2 &testArray 
    format "Test #3: %\n" testArray 

) 
init() 

Уведомление «testArray» получает изменено тестируемые функции и изменение отражается выходит за рамки основных функций.

Однако операции массива могут занимать много времени. Когда вы добавляете к массиву, как и в своем коде, он в основном создает копию вашего массива каждый раз, когда вы добавляете новый элемент.

Более быстрый метод должен был бы создать массив размера вам нужно сначала:

lista=#() 
lista[1000000] = "" 
for i = 1 to 1000000 do 
(
    lista[i] = "hola" 
) 

Удаление каждый элемент массива взял самый длинный, но я не думаю, что вам нужно сделать это. Maxscript делает много мусорной коллекции для вас, поэтому, когда ваш скрипт завершается, он должен освободить эту память. Возможно, вы могли бы попробовать следующее:

for i = 1 to lista.count do 
(
    lista[i] = undefined 
) 
lista = undefined 

Но опять же, я не думаю, что это необходимо. Вы можете вызвать встроенную функцию сбора мусора:

gc() 

Надеюсь, что ответит на ваш вопрос.

+0

Отличные ответы. Я еще не пробовал, но это полезно. То, что я пытался вместо этого, вызывает эти функции много раз, но время было так похоже ... Я попробую это вместо этого. – darkgaze

Смежные вопросы