这可能是一个边缘广告,更不用说主观,但问题是诚实的。在过去的两个月里,我一直在为.NET开发一个名为SlimTune Profiler(http://code.google.com/p/slimtune/)的新开源分析器。
这是一项相对较新的努力,但当我查看可用的分析仪系列时,我并没有给人留下深刻的印象。我已经做了一些基于现有产品的初步工作,但我觉得这是一个很好的问题:你究竟想从个人资料中找到什么?
我来自实时图形和游戏,所以对我来说,剖析器尽可能快。否则,游戏变得无法播放,并且分析无法播放的慢速游戏往往不会很有启发性。因此,我愿意牺牲一些准确性。我甚至不关心异常。但我不熟悉其他类型应用程序的开发人员感兴趣的内容。是否有适合您的创建或中断功能?现有工具在哪里崩溃?
同样,我很抱歉,如果这只是StackOverflow的基础,但它对我来说一直是一个非常有用的资源,而且这里有很多开发人员。
答案 0 :(得分:17)
我的要求:
会喜欢:
答案 1 :(得分:11)
我的愿望清单:
答案 2 :(得分:4)
有EQATEC Profiler这是一个我想要使用的免费.Net探查器。
我希望看到的一件事是Mono兼容性。我已经开始涉足Mono了,拥有.Net和Mono分析器会很棒!
答案 3 :(得分:4)
下载Visual Studio 2010 Beta 1的Team Suite版本(免费使用6个月左右?),并配置C#应用程序。
相信我。 :)
编辑:逐行模式帮助我隔离了导致性能问题的操作员。我可以在没有每行突出显示的情况下找到它,但是当你可以滚动并查看使用它的热线时,你可以轻松地修复它。
哦,如果您需要反馈/帮助,请单独与我联系。
摘要视图:选择要过滤的CPU图表的任何部分
(来源:280z28.org)
我喜欢边缘的逐行:
(来源:280z28.org)
答案 4 :(得分:3)
如果它做了与JetBrains dotTrace相同的事情,我会非常高兴。
答案 5 :(得分:2)
我会在这里添加一个真的很甜的东西。创建一个具有Mark(string)
函数的简单程序集,其中如果应用程序调用该方法,那么在结果中您可以选择从那里查看结果(结束|一些)其他指定标志)。另一种可能性是BeginSequence
和EndSequence
或其他。如果您可以指定标记是仅适用于当前线程还是适用于所有线程,则加倍。
答案 6 :(得分:2)
我想在个人资料中找到什么:
答案 7 :(得分:2)
Phsr已经提到了EQATEC Profiler。
我喜欢的一个功能是,即使没有阅读任何文档或完全关注我正在做的事情,我也能够从头到尾成功地分析应用程序。可用性是一件很棒的事情。请注意如何添加所有这些花哨的选项......不要在此过程中消除可用性。
答案 8 :(得分:2)
多年前,我构建了一个分析器,并在SO上描述了它,以回答我目前无法找到的其他问题,关于如何构建分析器。
它基于至少部分自动化我几十年来使用的技术,其中给出了一个例子here。它基于堆栈抽样,关键在于如何呈现信息,以及用户经历的思维过程。
关于性能调整的一般信念,即在学校教授(由几乎没有接触现实世界软件的教授),并且继续通过50,000程序员 - 不可能是错误的现象,我建议需要质疑并且站稳脚跟。我感觉就像这样远远不是一个人,因为你可能会在周围巡航时聚集起来。
我认为探测器技术正在逐步发展(在我看来更好),即叠加采样和探索结果的方法。以下是我所依赖的见解(您可能会发现有点不和谐):
发现性能问题以便修复它们并测量性能是两个完全不同的任务。它们是手段和目的,不应混淆。
要发现性能问题,我们需要找到哪些活动会占用大量的挂钟时间和,这些时间可以用更快的速度替换。
这些活动的好处是,他们花时间将它们暴露给程序状态的随机时间样本。
如果在您关心的间隔期间服用,则不需要很多样本。即在等待用户输入时采样是没有意义的。为此,在我的分析器中,我让用户用键触发样本。
您不需要很多样品的原因是这个。任何给定的性能问题都会花费在感兴趣的间隔中的挂钟时间的一部分X.该区间中的随机样本具有“在行为中捕获它”的X概率,因此如果采用N个样本,则在该行为中捕获它的预期样本数量是NX。该样本数的标准偏差是sqrt(NX(1-X))。例如,如果N = 20,X = 20%,您可以预期大约2到6个样本来显示问题。这给你一个不精确的问题测量,但它确实告诉你它值得修复,它给你一个非常精确的位置,没有任何进一步的侦探工作。
问题通常表现为比必要的更多的函数,过程或方法调用,特别是当软件变大,具有更多抽象层,因此更多的堆栈层时。我要寻找的第一件事是出现在多个堆栈样本上的调用站点(不是函数,而是调用语句或指令)。它们出现的堆栈样本越多,它们的成本就越高。我要寻找的第二件事是“他们可以被替换吗?”如果他们绝对不能用更快的东西替换它们,那么它们只是必要的,我需要寻找其他地方。但通常他们可以被替换,我获得了很好的加速。因此,我正在仔细研究特定的堆栈样本,而不是将它们聚合到测量中。
递归不是问题,因为指令的成本是它在堆栈上的时间百分比的原则是相同的,即使它自己调用它。
这不是我曾经做过的事,而是在连续的传球中。我修复的每个问题都会使程序花费更少的时间。这意味着其他问题变得越来越大,使它们更容易找到。这种效果会复合,因此通常可以实现显着的累积性能提升。
我可以继续,但我祝你好运,因为我认为需要更好的分析工具,你很有可能。
答案 9 :(得分:1)
如果集成了来自Perfmon的.NET相关性能分析测量,那将是很好的,这样您就可以避免使用perfmon和您的应用程序进行“双重”监控。这对所有与内存相关的项目非常有用。
答案 10 :(得分:1)
我的首选个人资料是“DevPartner Performance Analysis Community Edition”(http://researchlibrary.theserverside.net/detail/RES/1165507815_474.html?psrc=MPR),遗憾的是它已不再可用。
使它在竞争中脱颖而出的是图形分析,它显示了当前所选方法的框和传出的连接到被调用的方法,显示了每个方法花费的时间百分比。也是接听电话的连接器。当然,caling和被调用的方法都是一样的,你可以根据需要扩展它们 这样,您可以在调用堆栈中自由导航,根据需要查看堆栈,并处理片段中的热路径。
第二个需求是“易用性”,即它应该运行所有相关的应用程序类型,Windows exe,Web应用程序,Windows服务,WCF服务,(Silverlight?),....不仅适用于小型样本应用程序,而且适用于企业规模不那么重要的应用程序。
答案 11 :(得分:1)
我希望至少与ASP.NET有一些兼容性,但我知道实际上很难让它工作。
在Shark中逐行排队,我也想在.NET中使用它。
可视化器的选择是一件好事 - 我希望看到一堆不同的调用树,统计图表,甚至可能是最频繁调用哪种方法的热图。
答案 12 :(得分:1)
我真的很想看到几件事:
数据收集:
用户界面结束:
答案 13 :(得分:1)
几乎所有配置文件中我误解的一个问题是托管API,用于执行自动分析和自动化测试。
我可以想象你认为,WTF ......为什么人们会喜欢自动化分析?
答案是我们的一些客户对速度,内存使用等有要求。因此,对于每个新版本,我们都希望在发货之前对所提到的内容进行测试。