分析与调试是什么做法

时间:2014-08-14 07:31:35

标签: performance debugging optimization profiling

大多数情况下,我确实如何最好地使我的应用程序具有最佳性能。如何优化和识别比其他更耗费资源的功能/方法,并进行必要的调整。在软件开发中,无论语言如何,我都相信,应该通过一些方法来了解我的代码的不同部分如何使用处理器/网络资源。我将用我能想到的最简单的例子来说明我的意思:我有Java,Python和PHP的背景,并且在linux环境下工作感觉更舒服。请随时使用您熟悉的任何语言为我提供建议:

在Javascript中,可以通过执行以下操作来轻松地测试并为变量赋值:

//METHOD 1:
if(true){
    console.log("It will always be true");
}else{
   console.log("You can never see me");
}

//METHOD 2:
var print;
if(true){
    print="It will always be true";
}else{
    print="You can never see me";
}
console.log(print);

//METHOD 3:
console.log((true)? "It will always be true" : "You can never see me");

如果不同的人被问到这些方法中哪一种比另一种更快。我相信不同的人会提出不同的想法。但我需要一种更可靠的方式来了解桌面和移动应用程序的资源使用情况。感谢。

2 个答案:

答案 0 :(得分:0)

首先,当您知道确切的错误或错误的功能时,就会完成调试。 它用于功能测试,即检查应用中的缺陷。

对于性能,分析器用于查找资源密集型方法。它们将提供繁重的模块/功能/数据库查询等,以便在分析后您可以调整和改善系统性能。如果修改后出现一些缺陷,那么您可以使用调试器来查明并纠正问题。

有很多开源以及java的付费分析器(我说java因为你粘贴了javascript代码)。

请查看它们并使用它们来调整您的系统。

IMHO downvoting有两个原因,英语不好,非常基本的问题。

答案 1 :(得分:0)

在你给出的例子中,它无所谓。这就像问什么更快,蜗牛或蠕虫,但如果通过

  1. “性能分析”是指“功能所用时间的测量”,以及

  2. “调试性能问题”你的意思是“错误是时间花在了不必要的时间,我需要找出原因”,

  3. 然后我非常同意你的问题的前提。

    Debugging works much better. 性能问题包括因不必要的原因而花费的时间过长。 找到它的方法是在随机时间进入执行,这自然会倾向于花费最多时间。 问题花费的时间越多,解决问题的可能性就越大。 只需要做几次,每次仔细查看程序的状态,就能理解为什么它正在做它正在做的事情。 如果你看到它做了一些可以避免的事情,并且你看到它在多个休息时间内完成它,你就会发现性能问题。 修复它并观察加速。

    然后重复这个过程,因为下一个最大的问题是现在最大的问题。 加速成倍增加。 Here's an example时间从2700us到1800,然后到1500,1300,440,170,最后是3.7us。没有一个加速比原始时间的那么大,但总的来说,它们是惊人的。

    这与测量非常不同。 在测量中,首先发生的是你假设数值精度很重要,所以你假设你需要大量的样本,或者你需要检测代码来精确测量时间。

    好像数字准确性有助于找到问题。 这种错误的假设在1982年GPROF出现时就进入了程序员的意识。

    在测量中,您认为问题可以本地化为函数,而实际上您需要查看某个时间点发生的所有事情,以了解是否可以避免。

    恕我直言,最好的剖析器在挂钟时间内对堆栈进行采样,并报告样本上出现的每行代码,它出现的样本百分比。 但是,即使这些分析器也不会通过简单地仔细查看单个堆栈样本和数据来告诉您可以获得的上下文。 (其他形式的眼睛糖果也有同样的问题:调用图,热路径,火焰图等。)