忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2024/03/29 14:52 |
PHP5.4.4 SplFixedArrayで固定長配列
PHPの配列は、普通の配列も連想配列も実際は順序付きMapです。
JavaであればArrayListやTreeMap等色々な配列があってややこしいのですが、PHPだと全部array()で楽ちん。
これは非常に便利なのですが、でも自由度があるぶん遅いです。
固定長配列しか扱えないかわりに高速化されたSplFixedArrayというものがありましたので使ってみます。

<?php
	$max = 1000000;
	
	$array = array();
	$splFixedArray = new SplFixedArray($max);
	$time=array();
	
	// arrayにput
	$time[1] = microtime(true);
	for($i=0;$i<$max;$i++){
		$array[$i] = $i;
	}
	$time[2] = microtime(true);
	
	// SplFixedArrayにput
	$time[3] = microtime(true);
	for($i=0;$i<$max;$i++){
		$splFixedArray[$i] = $i;
	}
	$time[4] = microtime(true);
	
	// arrayからget
	$time[5] = microtime(true);
	foreach($array as $key=>$val){
		$tmp = $val;
	}
	$time[6] = microtime(true);
	
	// SplFixedArrayからget
	$time[7] = microtime(true);
	foreach($splFixedArray as $key=>$val){
		$tmp = $val;
	}
	$time[8] = microtime(true);
いいかげんな計測方法ですがまあ気にしない。
結果は以下のとおり。

array put: 0.25703620910645
array get: 0.061129093170166

SplFixedArray put: 0.11810994148254
SplFixedArray get: 0.13133406639099

挿入はSplFixedArrayが配列の約半分、でも取得は普通の配列のほうが早くてSplFixedArrayの約半分という微妙な結果になりました。
合計としてはSplFixedArrayに軍配があがりますが、それでも100万件で0.1秒差とかそういうレベルです。
よっぽど時間にシビアなシステムでもないかぎり、現状の配列をわざわざ差し替えるほどのものではないかなあと。
どちらかというと予め最大数を決めておきたい場合に使うとかになるでしょうか。

PR


2013/04/12 23:47 | Comments(0) | PHP

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<今週の実績 2013/04/14 | HOME | WEBZARU 「PHPでCSVデータを読み込む(文字化け対策ver)」 の感想>>
忍者ブログ[PR]