2010-08-26 54 views
2

我是剖析中的一个虚拟角色,请告诉我您的人员如何分析您的应用程序。哪一个更好,分析整个应用程序或进行隔离?如果选择是隔离你如何做到这一点?是否有任何技术可以单独进行配置文件测试?

+0

我的意思是每个班级模块等都是分开测试而不知道对方(抱歉也许不是一个正确的词来表示它)。 – bonjorno 2010-08-26 12:19:32

回答

5

尽可能地解析整个应用程序,运行实(典型值)的工作量。除此之外,你冒险得到的结果会导致你将重点放在错误的地方。

编辑

是不是太硬剖析整个应用程序时得到正确的结果呢?所以测试结果取决于用户交互(按钮点击等)而不使用自动任务?告诉我,如果我错了。

获得“正确结果”取决于您如何解释分析数据。例如,如果你正在分析一个交互式应用程序,你应该找出配置文件的哪些部分对应于等待用户交互,并忽略它们。

有许多与零件剖析应用程序的问题。例如:

  • 通过先确定应用程序的部分需要分析哪些,你没有得到的不同部分的相对贡献的良好形象,你的风险在错误的部分浪费精力。

  • 你几乎必须使用人工工作量。每当你这样做时,就有可能工作负载不能代表“正常”工作负载,而且你的性能分析结果有偏差。

  • 在许多应用中,瓶颈的方式是由于应用程序的各个部分彼此交互,或者与I/O或垃圾收集。单独分析应用程序的不同部分很可能会错过这些交互。

...我所寻找的是技术

粗略地说,你开始通过配置文件数据所确定的最大的“热点”和深入,直到你想通出为什么这么多都是在某个地区度过的。如果您的分析工具可以汇总数据并自上而下展示数据,这真的很有帮助。

但是,从分析证据(热点,堆栈快照等)到根本原因以及补救措施的一天结束时,往往要归功于来自经验的实践知识和直觉。

(是啊......我胡扯了一下。但我的观点是,有没有神奇的公式这样做。最终,你必须使用你的大脑......就像你在调试时复杂的应用程序。)

+0

感谢您的快速回答,但是在分析整个应用程序时,是不是很难得到正确的结果?所以测试结果取决于用户交互(按钮点击等)而不使用自动任务?告诉我,如果我错了。 – bonjorno 2010-08-26 12:36:55

+0

@bonjomo:斯蒂芬是完全正确的。如果你专注于一个特定的模块,那么你实际上会带来预判,而当你做这件事时,你首先要学习的是问题不在于你可能猜到它们的地方。如果您将整体分析为一个整体,那么问题会告诉您它们在哪里。无需猜测。 – 2010-08-26 13:46:14

+0

我疯狂地同意你到最后一段:-)我不在乎“热点”的概念,也不在乎“钻取”的方法,但我怀疑当我们下定决心的时候,我们'同样的话。 – 2010-08-26 14:53:35

2

首先,我只是一个观看时间它得到整体测量值。

然后我在调试器下运行它并采取stackshots。这些做的是告诉我哪些代码行负责大部分时间。特别是,这意味着函数被调用的行不需要需要,以及我可能没有意识到的I/O。

因为它显示了我需要时间的代码行,并且可以以更好的方式完成,所以我修复了这些行。

然后我从顶部开始,看看我实际保存了多少时间。我重复这些步骤直到我再也找不到a)需要花费大量时间的事情,并且b)我可以修复。

这被称为“穷人的概况”。小秘密不仅便宜,而且非常有效,因为它避免了common myths about profiling

P.S.如果它是一个交互式应用程序,那么只需要对它的速度慢的部分进行处理,就像按下“Do Useful Stuff”按钮并在几秒钟后完成一样。在等待你时拍摄堆叠照片毫无意义。

P.P.S.假设有一些活动应该更快,但是过快完成堆叠拍摄,就像需要一秒钟,但应该花费几分之一秒。那么你可以做什么(暂时)围绕循环包装一个,迭代10或100次。这将花费足够的时间来获取样本。在你加速之后,去掉循环。

+0

+1为链接和+ 10对于这些链接的很好的答案,谢谢。我虽然写了这个反驳我对斯蒂芬C答案的评论,所以它与原始答案有点不同。这是伟大的,但我应该选择斯蒂芬接受答案 – bonjorno 2010-08-26 21:31:13

+0

@bonjorno:Thx。是。斯蒂芬说得很好。你点击我的“常规按钮”,性能调整不需要是一个侦探工作的过程,但可以更像是修剪一棵树,即调用树。这通常不是众所周知的,所以我倾向于这样说。 – 2010-08-26 23:16:07

相关问题