.NET - 如何比较两个代码块之间的性能?

Posted

技术标签:

【中文标题】.NET - 如何比较两个代码块之间的性能?【英文标题】:.NET - How to compare performances between 2 blocks of code? 【发布时间】:2011-04-08 14:08:00 【问题描述】:

我正在寻找一种简单的方法来比较两种做事方式的性能。 基本上我有一个返回相同结果的方法,但是我发现了两种不同的方法来获得预期的结果。

.NET 或 Visual Studio 是否提供了一个类来分析内存消耗和处理器使用情况?

【问题讨论】:

@Romain:请展示“两种方式”的代码,否则没有人会在这里写一整篇博客。 @Niraj:他的问题是如何比较两个代码块之间的性能。代码内容无所谓。 在“压力”下运行它们(无论这对您意味着什么:大量用户、大量输入等)。你注意到明显的不同了吗?不?然后没关系:使用另一个标准来挑选。你注意到不同了吗?选择最好的。 @Ranhiru:但我们不知道他在函数中所做的所有“事情”。例如可能存在数据库访问或许多其他影响功能性能的因素。 @Niraj:是的,确实如此 :) 但他主要关注的是如何在不考虑代码的情况下完成这些事情。代码是什么对我们来说并不重要。 【参考方案1】:

您可以使用StopWatch 类进行基本计时——不用说,您需要重复运行,以获得统计上有效的结果,以排除外部因素。对于内存或 CPU 利用率,您可以使用性能计数器,但要小心解释结果,以排除来自外部因素的开销和偏差

【讨论】:

是的,我想这是一种方法。我试试看。【参考方案2】:

您可以使用 sql profiler 来检查编号。 db 访问权限以及等待访问内容的时间,您可以检查性能

【讨论】:

是的,我本可以使用它,但是由于我想尝试的代码中没有数据库访问权限,所以它可能没有帮助。【参考方案3】:

您应该查看 Visual Studio 的性能向导。 该工具可以以几种不同的方式分析执行。

【讨论】:

【参考方案4】:

DateTime 不好,您希望 StopWatch 类测量时间。 要查看负载和内存消耗,您需要一个分析器。

【讨论】:

【参考方案5】:

要获得总内存消耗,您可以使用GC Class

    //initialise objects/vairables subject to memory measurement

    long memUsageBefore = GC.GetTotalMemory(true); 

    //do something with some measured object

    long memUsageAftere  = GC.GetTotalMemory(true); 

    // make it ineligible for garbage collection from the start of the current routine to the point where this method is called. 
    GC.KeepAlive(measuredObject); 

【讨论】:

【参考方案6】:

你可以试试Eqatec Profiler。

【讨论】:

【参考方案7】:

比较每个方法需要多少 DateTime.Ticks。

【讨论】:

【参考方案8】:

您正在寻找的是 Profiler。

看到这个website

或者您可以使用StopWatch class in the System.Diagnostics namespace 来测量时间。

也看看这个问题 - .NET code profiling tools

【讨论】:

谁投了反对票,请好心知道答案有什么问题:)

以上是关于.NET - 如何比较两个代码块之间的性能?的主要内容,如果未能解决你的问题,请参考以下文章

10代码块构造代码块静态代码块及main方法之间的关系

Python 小数据池代码块以及代码块缓存机制

java 面试题

自定义Typora代码块样式

自定义Typora代码块样式

如何使用 Prettier 在代码块之间添加多行?