它如何影响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 :(得分: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()
希望能回答你的问题。