foreach的巨大性能问题
问题描述:
我正在寻找脚本中的性能泄漏,也许任何人都知道一些奇怪的东西?foreach的巨大性能问题
其实我有巨大的数组(3mil的数据集。),它看起来像这样(简化):
[2]=>
array(11) {
["A"]=>
string(10) "10-12-1995"
["B"]=>
NULL
["C"]=>
NULL
[3]=>
array(11) {
["A"]=>
string(10) "31-12-1955"
["B"]=>
NULL
["C"]=>
string(6) "random"
我的功能必须检查,如果$起始日期是$ sheetData [$ i] [”一个']。 我还没有发现任何更好的主意,它的成本> 10秒的检查 整个阵列:(
function searchForDate($StartDate, $sheetData)
{
foreach($sheetData as $key => &$val)
{
if ($val['A'] === $StartDate)
{
return true;
}
}
return null;
}
答
假设这是PHP,因为那是什么样子,你可以尝试内置功能看它是否提供了更好的性能:
array_search($StartDate, array_column($sheetData, 'A'));
如果没有,那么你最好的选择是做什么@EricJ建议,看看是否可以将数据整理/以某种方式索引进行二进制搜索。
你一个重新做了300万个数据点的线性搜索。您能否安排数据按日期排序(或索引)?如果是这样,您可以改为执行二进制搜索。我不明白为什么在任何现代硬件上,对于任何现代语言来说,这都需要10秒钟,假设数据完全在内存中。这是什么语言? –
你使用什么语言或系统? – jtbandes