0

它如何影响 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()
4

1 回答 1

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()

希望这能回答你的问题。

于 2015-02-13T23:31:38.687 回答