php - strpos vs preg_match - 内存和资源差异

时间:2016-07-01 08:06:46

标签: php

有人问过哪个更快的strpos或preg_match,但我很感兴趣知道哪个使用最少的内存和CPU资源。

我想查看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))

使用服务器上的最小压力来实现此目的的最佳方法是什么..

由于

1 个答案:

答案 0 :(得分:1)

Simba's comment是推荐KCachegrind进行应用程序分析的最佳答案。您可以在this answer中看到有关衡量效果的更多信息。

对于这个关于内存的特定示例的问题,我使用PHP的memory_get_peak_usage

来衡量L1 = List((a,1), (b,2), (c,3), (d,4)) L2 = List((a,b), (b,c), (a,d)) 是否更好
L3 = List((1,2), (2,3), (1,‌​4))
  

峰值记忆:501624

preg_match
  

峰值记忆:504624

这对我来说似乎很合理,因为你正在进行4次<?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(); 函数调用。