我是剖析中的一个虚拟角色,请告诉我您的人员如何分析您的应用程序。哪一个更好,分析整个应用程序或进行隔离?如果选择是隔离你如何做到这一点?是否有任何技术可以单独进行配置文件测试?
回答
尽可能地解析整个应用程序,运行实(典型值)的工作量。除此之外,你冒险得到的结果会导致你将重点放在错误的地方。
编辑
是不是太硬剖析整个应用程序时得到正确的结果呢?所以测试结果取决于用户交互(按钮点击等)而不使用自动任务?告诉我,如果我错了。
获得“正确结果”取决于您如何解释分析数据。例如,如果你正在分析一个交互式应用程序,你应该找出配置文件的哪些部分对应于等待用户交互,并忽略它们。
有许多与零件剖析应用程序的问题。例如:
通过先确定应用程序的部分需要分析哪些,你没有得到的不同部分的相对贡献的良好形象,你的风险在错误的部分浪费精力。
你几乎必须使用人工工作量。每当你这样做时,就有可能工作负载不能代表“正常”工作负载,而且你的性能分析结果有偏差。
在许多应用中,瓶颈的方式是由于应用程序的各个部分彼此交互,或者与I/O或垃圾收集。单独分析应用程序的不同部分很可能会错过这些交互。
...我所寻找的是技术
粗略地说,你开始通过配置文件数据所确定的最大的“热点”和深入,直到你想通出为什么这么多都是在某个地区度过的。如果您的分析工具可以汇总数据并自上而下展示数据,这真的很有帮助。
但是,从分析证据(热点,堆栈快照等)到根本原因以及补救措施的一天结束时,往往要归功于来自经验的实践知识和直觉。
(是啊......我胡扯了一下。但我的观点是,有没有神奇的公式这样做。最终,你必须使用你的大脑......就像你在调试时复杂的应用程序。)
感谢您的快速回答,但是在分析整个应用程序时,是不是很难得到正确的结果?所以测试结果取决于用户交互(按钮点击等)而不使用自动任务?告诉我,如果我错了。 – bonjorno 2010-08-26 12:36:55
@bonjomo:斯蒂芬是完全正确的。如果你专注于一个特定的模块,那么你实际上会带来预判,而当你做这件事时,你首先要学习的是问题不在于你可能猜到它们的地方。如果您将整体分析为一个整体,那么问题会告诉您它们在哪里。无需猜测。 – 2010-08-26 13:46:14
我疯狂地同意你到最后一段:-)我不在乎“热点”的概念,也不在乎“钻取”的方法,但我怀疑当我们下定决心的时候,我们'同样的话。 – 2010-08-26 14:53:35
谢谢,但我正在寻找的是技术。 – bonjorno 2010-08-26 12:43:49
首先,我只是一个观看时间它得到整体测量值。
然后我在调试器下运行它并采取stackshots。这些做的是告诉我哪些代码行负责大部分时间。特别是,这意味着函数被调用的行不需要,需要,以及我可能没有意识到的I/O。
因为它显示了我需要时间的代码行,并且可以以更好的方式完成,所以我修复了这些行。
然后我从顶部开始,看看我实际保存了多少时间。我重复这些步骤直到我再也找不到a)需要花费大量时间的事情,并且b)我可以修复。
这被称为“穷人的概况”。小秘密不仅便宜,而且非常有效,因为它避免了common myths about profiling。
P.S.如果它是一个交互式应用程序,那么只需要对它的速度慢的部分进行处理,就像按下“Do Useful Stuff”按钮并在几秒钟后完成一样。在等待你时拍摄堆叠照片毫无意义。
P.P.S.假设有一些活动应该更快,但是过快完成堆叠拍摄,就像需要一秒钟,但应该花费几分之一秒。那么你可以做什么(暂时)围绕循环包装一个,迭代10或100次。这将花费足够的时间来获取样本。在你加速之后,去掉循环。
+1为链接和+ 10对于这些链接的很好的答案,谢谢。我虽然写了这个反驳我对斯蒂芬C答案的评论,所以它与原始答案有点不同。这是伟大的,但我应该选择斯蒂芬接受答案 – bonjorno 2010-08-26 21:31:13
@bonjorno:Thx。是。斯蒂芬说得很好。你点击我的“常规按钮”,性能调整不需要是一个侦探工作的过程,但可以更像是修剪一棵树,即调用树。这通常不是众所周知的,所以我倾向于这样说。 – 2010-08-26 23:16:07
- 1. 是否有任何二进制索引文件访问技术?
- 2. 是否可以将URL重写配置置于单独的配置文件中?
- 3. 如何进行单元测试配置
- 4. 是否可以模拟GPU以进行CUDA/OpenCL单元测试?
- 5. 单元测试是否可以进行P/Invoke调用?
- 6. 是否可以对Cognos进行自动化单元测试?
- 7. 是否可以在CodeIgniter中对View进行单元测试?
- 8. 是否有我使用的测试技术的名称?
- 9. 什么技术可以用来使写作测试更有趣?
- 10. TDD,你有什么技术可以找到好的测试?
- 11. 如何确定现有的类是否可以进行单元测试?
- 12. 是否可以将NDbUnit测试数据保存在单独的XML文件中?
- 13. 是否有可能在MVC4中对BundleConfig进行单元测试?
- 14. 可以单独使用接口进行测试吗?
- 15. 是否可以使用MSTest进行上下文/规范测试?
- 16. 正确单元测试技术
- 17. 是否有任何jquery插件或技术类似于任何:hover htc?
- 18. 是否可以让多个cxf.xml文件配置系统的单独部分?
- 19. 什么是可用于Android内存测试的软件测试技术?
- 20. 是否可以运行所有单元测试?
- 21. NUnit:是否可以配置NUnit测试失败,如果没有Assert执行
- 22. 技术上是否可行?使用Dart搭配Lift是否合理?
- 23. 是否有任何技术用标志参数拆分方法?
- 24. 是否有任何技巧在apache cassandra上进行通配符搜索?
- 25. 是否可以从Scala的测试套件中运行单个测试?
- 26. 为dll设置单独的配置文件是否好设计?
- 27. SBT插件:是否可以为单个测试运行脚本,而不是运行所有测试?
- 28. 是否可以调试在Visual Studio 2010中进行单元测试的代码?
- 29. 什么是无线技术的配置
- 30. 是否有可能在ServiceStack中对ValidationFeature插件进行单元测试
我的意思是每个班级模块等都是分开测试而不知道对方(抱歉也许不是一个正确的词来表示它)。 – bonjorno 2010-08-26 12:19:32