Что быстрее: новый Vector. <T>ИЛИ Vector. <T>.splice (0, Vector. <T>.length)? - PullRequest
1 голос
/ 09 августа 2010

Что дает лучшую производительность?(отредактировано для включения другого параметра)

var myVec:Vector.<Number> = new Vector.<Number>();

for (...)
    // Do stuff - example: myVec.push(Math.random());

// Need to empty and repopulate vector
myVec.splice(0, myVec.length);
// OR
myVec = new Vector.<Number>();
// OR 
myVec.length = 0;

Ответы [ 2 ]

1 голос
/ 09 августа 2010

Используя приведенный ниже код, myVec = new Vector.<T>() - самый быстрый способ.

Вывод (среднее время в мс для очистки Vector.<Number> с 100000 случайных записей):

0.679 // using splice()
0.024 // using new Vector.<T>()
0.115 // using .length = 0;

код:

var myVec:Vector.<Number> = new Vector.<Number>();

var emptyTime:int;
var startTime:int;

var totalEmptyTime:Number = 0;

// Need to empty and repopulate vector
const NUM_TRIALS:int = 1000;

var j:int;
for(j = 0; j < NUM_TRIALS; j++)
{
    fillVector();
    startTime = getTimer();
    myVec.splice(0, myVec.length);
    emptyTime = getTimer() - startTime;
    totalEmptyTime += emptyTime;
}

trace(totalEmptyTime/NUM_TRIALS);
totalEmptyTime = 0;
// OR
for(j = 0; j < NUM_TRIALS; j++)
{
    fillVector();
    startTime = getTimer();
    myVec = new Vector.<Number>();
    emptyTime = getTimer() - startTime;
    totalEmptyTime += emptyTime;
}

trace(totalEmptyTime/NUM_TRIALS);
totalEmptyTime = 0;
// OR 
for(j = 0; j < NUM_TRIALS; j++)
{
    fillVector();
    startTime = getTimer();
    myVec.length = 0;
    emptyTime = getTimer() - startTime;
    totalEmptyTime += emptyTime;
}

trace(totalEmptyTime/NUM_TRIALS);

function fillVector():void
{
    for (var i:int = 0; i < 100000; i++)
        myVec.push(Math.random());
}
1 голос
/ 09 августа 2010

Я слышал, что:

myVec.length=0

- самый быстрый способ ... но я никогда не проверяю эту точку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...