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
댓글을 달아 주세요