.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 - 如何比较两个代码块之间的性能?的主要内容,如果未能解决你的问题,请参考以下文章