免费的.NET 4.0混合代码分析工具

6
我查看了一些在这里提到的性能分析器。但是...
  • EQATec对我没有用,因为我想要对许多程序集进行分析,而它有一个程序集分析的限制。获取免费许可证有多麻烦?如果有人保证EQATec可以分析托管和非托管代码,那我会使用它。
  • SlimTune只分析了我的托管代码,即使我将“分析本地函数”设置为“True”
  • XTE Profiler不再免费
  • 我们有一份之前购买的AQTime 6,但似乎不支持.NET 4.0应用程序(它甚至无法启动我的应用程序)
  • 我们使用Visual Studio 2010 Professional SP1,因此我们没有Visual Studio分析器
  • 我尝试了“穷人版分析”(多次停止程序并查看其位置),但结果太随机,我更习惯传统的分析方法

(我整天都在困惑中度过,如果我太消极了,请见谅)

更新:清理了解决方案、重新构建并检查所有调试信息(.pdb)是否复制到可执行文件的同一目录后,我再次尝试了AQTime,并且它可以工作了!它向我显示了托管和非托管代码的常规时间信息,所以我的问题已得到解决。但是,我使用的是付费分析器,因此这个问题将保持开放状态,直到我看看xperf或有人提出其他解决方案为止。


2
+1;我不认为你听起来很消极!我认为你听起来很沮丧,但既然你记录了你的沮丧,很难反驳(最坏的情况是你不够勤奋,但也不是卑微的吝啬鬼)。 - sehe
+1 教我“小气鬼”这个表达方式?(我不是母语为英语的人):P - dario_ramos
我也是,我查了一下 :) [在词库中反复搜索,只为找到与我想表达的相匹配的内容] (http://www.thefreedictionary.com/Scrooge) - sehe
5个回答

3
AQTime有他们最新分析器的免费版本(http://smartbear.com/products/free-tools/aqtime-standard/)。它支持。Net 4,但我怀疑它是否能够混合管理和本地代码进行分析。
如果你真的很在意这个问题,你可以查看Microsoft的xperf工具(http://msdn.microsoft.com/en-us/performance)。他们有一个陡峭的学习曲线,但是它们是免费的,我怀疑任何商业分析器都不能像xperf那样做到(该工具在操作系统中而不是单独的进程中进行仪器化,因此需要Vista、Win7或Win2K8)。我正在等待有人写一个好的GUI,但这需要一点时间... ;-)
xperf将为您的本机代码进行分析,并且您可以将符号加载到结果查看器中。但我认为它不会下降到每行的粒度。它具有.Net CLR提供程序(http://msdn.microsoft.com/en-us/library/dd264809.aspx)。关于xperf的酷炫之处在于它还可以显示其他可能影响性能的进程(您可以关闭它,仅对自己的进程进行分析)。例如:它能够揭示由于糟糕的USB驱动程序、病毒扫描程序或防火墙软件而导致IO变慢的情况。传统的分析器只会显示慢IO,导致您将注意力集中在非瓶颈上。
顺便说一句,还有一个ICorProfilerCallback接口可以用来编写自己的分析器(http://msdn.microsoft.com/en-us/library/s5ec0es1.aspx)。

1

我非常确定你问题的答案是“没有”。

几个月前,我比较了一堆.NET分析器,发现只有极少数能够进行混合.NET /本机分析:AQTime($ 599)和Glowcode($ 499)可以。或者他们这样说-我没有尝试过。

EQATEC,Visual Studio,ANTS,Jetbrains dotTrace,Yourkit,XteProfiler,Slimtune等都不能,所以我怀疑你很难找到一个免费的分析器。


你试过xperf吗?看看@Louis Somers的回答。 - dario_ramos
我使用过xperf,但仅用于本机代码 - 而不是托管代码。总的来说,这不是一个容易使用的工具。只需查看http://blogs.msdn.com/b/seema/archive/2008/10/08/xperf-a-cpu-sampler-for-silverlight.aspx上的“简单10步指南”,您就会明白我的意思。您所获得的只是库/系统调用的原始CPU周期图,与您自己应用程序的代码没有关联,而且在我看来,这就意味着xperf根本不是.NET分析的严肃工具。 - Richard Flamsholt
我阅读了你链接的帖子,但我不太确定,也许可以配置xperf使用我的应用程序的调试符号以及运行时的符号。我会尝试一下并回复你,但可能需要一些时间,因为现在我正在上大学考试。 - dario_ramos
我并不是说这是不可能的,但这似乎是一条相当痛苦的路。顺便问一下,你确定你真的需要混合模式分析吗?我做过很多“混合编程”(.NET调用C++),实际上从来没有真正需要过混合模式分析:只需对托管代码进行分析就可以指出每个实际瓶颈,包括间接的本地代码。 - Richard Flamsholt
是的,我们确实需要它,我们的非托管代码库相当庞大,并包含关键部分。与托管代码的交互非常复杂;在托管和非托管方面都有很多遗留代码。现在我对AQTime感到满意,但我保证一旦有空闲时间,我会试用xperf,如果不行,我会接受你的答案。 - dario_ramos
其实有一个真正简单的解决方法:同时使用托管和非托管分析器。使用EQATEC Profiler,这非常容易,因为一旦它为您的应用程序提供了仪表化支持,分析器本身就不需要任何介入:被仪表化的应用程序会自己计时,无论您以什么速度运行它,包括在另一个非托管(甚至托管)分析器中运行应用程序。请参见http://forum.eqatec.com/default.aspx?g=posts&t=493 - Richard Flamsholt

0

OP: "如果有人能保证XXXX可以对托管和非托管代码进行分析,我会选择它"

我们的C# Timing Profiler不依赖于您的C#代码是如何编译的(托管、非托管或混合)。它应该可以很好地完成这项工作。


不好意思,我忘了我们的代码库中有一些用VB.NET编写的dll文件,所以我认为你的解决方案行不通。 - dario_ramos
我们目前没有VB.net分析工具,这是事实。没有它,C#分析器将无法捕获VB.net例程内的时间,但它应该能够捕获所有C#代码的执行时间。 - Ira Baxter
伙计们,现在它不再是免费的了。现在它是共享软件: 评估下载具有完整的文件处理功能,但在安装文档中规定的功能限制下,直到使用实际购买许可证获得的注册进行注册。即使设置了评估限制,您仍然可以设置您的环境并评估产品,然后如果需要购买许可证,并注册产品以查看完整结果。 - user2745509
它从未是免费的,我们也从未声称过。短语“我们的…”被SO长期接受,以表明这是与发布者(即我)有密切联系的事物(例如,我恰好是建造者/销售商)。它始终作为评估下载提供,并提供升级选项。OP已经购买了商业软件,其他答案似乎表明没有好的解决方案。我们的软件可以做到。 - Ira Baxter

0

我在托管部分也寻找同样的东西:哪个函数或行消耗了更多的时间。我曾经尝试过一次,但是它在启动时就崩溃了。非常严重。 - dario_ramos

0

关于EQATEC Profiler的问题很容易解决:它只进行托管的.NET分析,不涉及任何非托管分析。

价格所示,实际的分析功能仅在一次可以分析的程序集数量上有所不同。因此,$0免费版与$999企业版一样可以很好地分析单个WP7应用程序。对于额外的价格标签,您可以同时分析更多的程序集以及一些次要功能,例如打印、比较、最小/最大值等。

据说通过试用EQATEC Analytics可以轻松获得免费许可证。选择无限制的企业许可证是相当受欢迎的选择,许多人在几个小时内就获得了许可证。如果你很擅长,获得一个免费的$99标准许可证不应该需要超过10分钟。请注意:我在EQATEC工作,我们现在每天都会发放如此多的免费许可证,以至于这几乎成为了负担,因为每个许可证都是手动处理的(是的,真的!),所以这个特别优惠可能不会永远持续。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接