Array 갯수만큼 for 돌리기 벤치마크

 

javascript 의 Array의 length 프로퍼티를 변수에 할당하지 않고 돌렸을때 비교를 해봣으니 다른언어로

한번 해봤다

 

서버사양이 셀러론이라 이런 벤치마크에 결과가 느리게 나와 아주 적절했다.

 

우선 PHP

<?php
function floatMicroTime() {
    list($usec, $sec) = explode(" ", microtime());
    return ((float)$usec + (float)$sec);
}
$array = array();


for($i = 0; $i < 100000; $i++) {
    $array[] = $i;
}

$start = floatMicroTime();
for ($i = 0; $i < count($array); $i++) {
}
echo "\n\n";
echo floatTime() - $start;




$start = floatMicroTime();
$total = count($array);
for ($i = 0; $i < $total; $i++) {
}
echo "\n\n";
echo floatTime() - $start;

 

변수를 할당하지 않은 경우 : 0.0593700408936

변수를 할당한 경우 : 0.016674041748

몇번 돌려도 결과는 대략 저정도로 출력됬다.

 

그럼 Python

import sys 
import time

class Benchmark():
    def __init__(self):
        array = []
        for i in range(0, 1000000):
            array.append(i)

        start = time.time()
        for i in range(0, len(array), 1):
            i  
        end = time.time()
        print end - start


        start = time.time()
        total = len(array)
        for i in range(0, total, 1):
            i  
        end = time.time()
        print end - start

Benchmark()

0.129267215729
0.127360105515

별차이가 없다 range할당부분에서 처리를 하나보다.

 

그럼 Ruby

class Benchmark
    def initialize()
        puts "start"

        array = []
        for i in (0 .. 1000000)
            array.push(i)
        end

        start = Time.now.to_f
        for i in (0 .. array.length)
        end
        puts Time.now.to_f - start

        start = Time.now.to_f
        arraylength = array.length
        for i in (0 .. arraylength)
        end
        puts Time.now.to_f - start
    end
end

Benchmark.new()

루비도 뭐 별로 다른게 없다

0.644505977630615
0.65896201133728

 

자바

public class Benchmark {

    public static void main(String[] args) {
        System.out.println("benchmark start\n");

        int[] array;
        array = new int[1000000];

        long start = System.nanoTime();

        for (int i = 0; i < array.length; i++) {
        }  
        System.out.println((System.nanoTime() - start) / 100000.0);


        System.out.println("\n");
        start = System.nanoTime();
        int arrayLength = array.length;
        for (int i = 0; i < arrayLength; i++) {
        }  
        System.out.println((System.nanoTime() - start) / 100000.0);



    }  
    
}


37.73793
7.1637

자바 는 역시 영향을 많이 받는다

java 5.0이상에서는 nanoTime이 부정확하다는 이야기도 있는데 내가뭘아나 일단 이걸루

 

 

 

2009/03/23 19:00 2009/03/23 19:00
juniac
개발 2009/03/23 19:00

트랙백 주소 : http://juniac.net/trackback/185

댓글을 달아 주세요

[로그인][오픈아이디란?]

Powerd by Textcube, designed by criuce