gpt4 book ai didi

php - KCachegrind 解释困惑

转载 作者:IT王子 更新时间:2023-10-29 01:02:04 25 4
gpt4 key购买 nike

我试图理解左侧面板中 Kcachegrind 中显示的值

我有包括。 (我在手册中读到的是包容性的),Self, Called an Function

现在我正在分析这个 cachegrind 文件,我有

Incl. ---- Self ---- Called ---- Function

100.05 ---- 0.04 ---- (0) ---- {main}

83.38 ---- 0.07 ---- 250 --- item->close

78.85 ---- 78.85 ---- 10 067 ---- php::mysql_query

列表还在继续......

但这是我的问题。

我认为 item->close 是我的瓶颈,但我不明白的是它如何具有 83.38 的 Inclusive 和 0.07 的 Self,而 mysql_query 命令在两者中具有相同的值。

这里的“ self ”是什么意思?

此外,这些百分比如何相互关联?我不明白 item->close 如何占用 83% 而 mysql_query 占用 78%

谢谢

最佳答案

“self”表示该函数所用的时间,而不是它调用的任何函数所用的时间。如果“ self ”低而“含”。很高,那么优化的最佳位置可能是其中一个子项(例如称为函数)。在这种情况下,看起来 mysql-query 占用了大部分时间,因此您可能想要优化查询(如果可能)。 mysql_qeury 之所以有 "self"== "incl."是探查器无法查看该函数,因为它在 php 运行时之外(例如,在 mysql 客户端库中)进行工作

我可能会补充说,对 mysql_query 的 10067 次调用看起来非常可疑。数据库查询是一项非常昂贵的操作。您确定不能以某种方式减少查询数量吗?

编辑:

I can try. But what about the Incl.? How is it 80 in the close and then 70 in the mysql query how does that relate to the total percentage which should be 100%

数字不需要相加。您正在查看的是这些函数所占用的整体时间的排序列表。它不是调用图(尽管它经常会以某种方式模仿它)。

假设以下代码:

function fn1() {
sleep(1);
fn2();
}
function fn2() {
sleep(98);
}
function fn3() {
sleep(1);
}
fn1();
fn3();

这可能会生成以下输出:

name | incl. | self
main | 100% | 0%
fn1 | 99% | 1%
fn2 | 98% | 98%
fn3 | 1% | 1%

当您按“包括”对列表进行排序时,您看到的是总体上速度较慢的函数。换句话说,那些在这里得分高的不一定慢,但它们调用了其他函数。如果一个功能在“包括”上得分很高。 and 有很多调用,您应该考虑尝试减少对此函数的调用次数,或者让函数缓存其结果(仅当它是查询而不是操作时才有效)。

当您按“自身”排序时,您会看到实际占用时间最多的调用。这些是您想要微调的功能。在大多数 PHP 脚本中,您会发现 mysql_query 支配着这个字段。如果您有很多电话,请再次尝试减少它们或缓存。如果您的调用很少,那么您可能需要优化 sql 查询。 PHP 调试器无法帮助您解决这个问题。相反,找到实际的查询并在 mysql 控制台中对其运行 explain。这本身就是一整章。

关于php - KCachegrind 解释困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1093138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com