2016-07-01 8 views
1

より速いstrposとpreg_matchのどちらが良いかを質問する質問がありましたが、メモリとCPUリソースが最も少ないものを知ることに興味があります。php - strposとpreg_match - メモリとリソースの相違

私は5試合のいずれかの行をチェックしたい:

if (strpos($key, 'matchA') !== false || strpos($key, 'matchB') !== false || strpos($key, 'matchC') !== false || strpos($key, 'matchD') !== false || strpos($key, 'matchE') !== false) 

if (preg_match("~(matchA|matchB|matchC|matchD|matchE)~i",$key, $match)) 

サーバー上の少なくとも株を用いて、これを行うための最善の方法は何..

おかげ

+0

もちろん、あなた自身で見つけるベンチマークプログラムを書くことができます。 :) – Simba

+1

しかし、あなたがコードを最適化したいのでこのことが心配ならば、私の主な勧告はそれを休んで、読みやすい/理解しやすい/デバッグする/維持することだけです。何千もの反復を伴うループでそれをやっていない限り、測定するパフォーマンスの違いはないので、最適化すれば何の違いもありません。コードを最適化するには、まずKCacheGrindのようなツールを使用して、コード内の特定のボトルネックを調べます。それらは最初に最適化する必要があるビットです。 – Simba

答えて

1

Simba's commentをアプリケーションのプロファイリングにはKCachegrindを推奨するのが最良の答えです。 this answerでパフォーマンスを測定する方法について詳しく見ることができます。

メモリについては、この特定の例の質問については、私はpreg_matchは、PHPのmemory_get_peak_usage

<?php 
$keys = ['matchA','matchB','matchC','matchD','matchE']; 

foreach ($keys as $key) 
    preg_match("~(matchA|matchB|matchC|matchD|matchE)~i",$key); 

echo 'Peak Memory: '.memory_get_peak_usage(); 

ピークメモリ使用して、より良い一貫している測定:501624

<?php 
$keys = ['matchA','matchB','matchC','matchD','matchE']; 

foreach ($keys as $key) 
    (strpos($key, 'matchA') !== false || strpos($key, 'matchB') !== false || strpos($key, 'matchC') !== false || strpos($key, 'matchD') !== false || strpos($key, 'matchE') !== false); 

echo 'Peak Memory: '.memory_get_peak_usage(); 

ピークメモリ:504624

str_posの関数呼び出しを余分に作成しているので、これは私にとっては妥当と思われます。