Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#我如何确定代码的慢部分在哪里?_C#_Profiling_Performance - Fatal编程技术网

C#我如何确定代码的慢部分在哪里?

C#我如何确定代码的慢部分在哪里?,c#,profiling,performance,C#,Profiling,Performance,我没有编写太长的代码,所以我不熟悉哪种技术最快,所以我想知道是否有一种方法可以在VS或第三方工具中实现这一点 谢谢请使用手机。花钱但很好。 有一个产品。 有一个产品。非常好。的ANTS Profiler如果你不想付费,新的VS verions附带了一个Profiler,但老实说,它看起来不是很好。ATI/AMD制作免费档案器。。。但是它对用户不是很友好(对我来说,我无法从中获得任何有用的信息) 我的建议是用代码调用time函数。如果它们很快,并且您没有高精度计时器,或者由于多种原因(例如,每x次

我没有编写太长的代码,所以我不熟悉哪种技术最快,所以我想知道是否有一种方法可以在VS或第三方工具中实现这一点

谢谢

请使用手机。花钱但很好。

有一个产品。

有一个产品。

非常好。

的ANTS Profiler

如果你不想付费,新的VS verions附带了一个Profiler,但老实说,它看起来不是很好。ATI/AMD制作免费档案器。。。但是它对用户不是很友好(对我来说,我无法从中获得任何有用的信息)


我的建议是用代码调用time函数。如果它们很快,并且您没有高精度计时器,或者由于多种原因(例如,每x次调用都会生成某种缓存),请尝试运行每一次x10000次或类似的操作,然后将结果进行相应的分割。这对于某些代码部分来说可能并不完美,但如果您无法找到一个好的、免费的第三方解决方案,除非您愿意付费,否则剩下的就差不多了。

我已经使用了ANTS Profiler,我可以加入其他人的推荐

当您将其与它为您节省的开发小时数进行比较时,价格可以忽略不计


我知道你是以开发为生的,你的公司不会为你买它,要么改变公司,要么自己买。

还有另一个选择是英特尔的。

要分析大型复杂UI应用程序,你通常需要一套工具和方法。我将概述我最近在一个项目中使用的提高.NET2.0UI应用程序性能的方法和工具

首先,我采访了用户,并亲自研究了用例,列出了一个目标用例列表,其中突出了系统性能较差的领域。也就是说,我不想花n个工作日来优化一个很少使用但速度非常慢的功能。然而,我想花时间优化一个功能,这个功能有点慢,但一天调用1000次,等等

一旦确定了候选用例,我就用自己的轻量级日志类插入代码(我使用了一些高性能计时器和自定义日志解决方案,因为需要亚毫秒的精度)。不过,您可能可以使用log4net和时间戳。我插入代码的原因是,有时读取自己的日志比读取分析器的输出更容易。出于各种原因,我需要两者(例如,使用探查器测量.Net用户控件布局并不总是简单)

然后,我用ANTS分析器运行我的插入指令的代码,并分析用例。通过结合ANTS配置文件和我自己的日志文件,我很快就能发现应用程序中的问题

我们还分析了服务器和UI,并能够计算出在UI中花费的时间、在线路上花费的时间、在服务器上花费的时间等的明细

同样值得注意的是,一次跑步是不够的,而第一次跑步通常是值得扔掉的。让我解释一下:PC负载、网络流量、JIT编译状态等都会影响特定操作所需的时间。一个简单的策略是测量一个操作n次(比如说5次),扔掉最慢和最快的运行,然后分析remianing配置文件。

好的,下表决时间

轮廓仪非常适合测量

但你的问题是“我如何确定代码的慢部分在哪里?”

这是另一个问题。这是诊断,而不是测量

我知道这不是一个流行的观点,但这是真的。

这就像一家试图削减成本的企业

一种方法(自上而下)是测量总体财务状况,然后按类别和部门进行细分,并尝试猜测哪些可以消除。这就是测量

另一种方法(自下而上)是随机走进办公室,随机挑选某人,详细询问他们当时在做什么(重要的是)为什么

多次执行此操作。

这就是哈里·杜鲁门(Harry Truman)在二战爆发时在美国国防工业中所做的,他通过访问几个网站,立即发现了大量欺诈和浪费。这就是诊断

在代码中,您可以用一种非常简单的方式来做到这一点:“暂停”它,并询问它为什么要花费那个特定的周期。通常,调用堆栈会详细地告诉您原因

多次执行此操作。

这是抽样。一些分析器对调用堆栈进行采样。但出于某种原因,他们坚持总结在每个功能中花费的时间,包括和排除。这就像在商业中按部门汇总一样,包含和排除

它会丢失您需要的信息,这是一个细微的细节,可以告诉您是否需要循环

回答您的问题:

只需将程序暂停几次,然后每次捕获调用堆栈。如果您的代码非常慢,那么浪费的函数调用几乎会出现在每个堆栈上。它们将精确地指向“代码的缓慢部分”


补充:红门蚂蚁正在到达那里。它可以给你线的成本,它是相当漂亮的。因此,如果您在.NET中,可以节省3位数的空间,并且不介意等待安装和学习它,它可以告诉您暂停键可以告诉您的很多信息,并且更加美观。

是一个可爱的小型剖析器,免费且易于使用。就功能而言,它可能不会接近Ants profiler的“惊喜”因素,但在我看来它仍然非常酷,值得一看。

我刚刚设置了断点,visual将告诉您断点之间经过了多少毫秒。所以您可以手动查找。

您是否已经确定您的代码确实很慢?我完全同意这一点。我建议你编辑这篇文章,然后把“回答你的问题”部分贴出来。@Mo:谢谢