I need to do some performance benchmarks on .NET programs (C#) in Windows, but I haven't done benchmarking much in the Windows world. I've looked into using the Windows 2000/XP Performance monitor with custom counters for this, but I don't think this is quite what I want.
我需要在Windows中对.NET程序(C#)进行一些性能基准测试,但我还没有在Windows世界中做过很多基准测试。我已经考虑过使用带有自定义计数器的Windows 2000 / XP性能监视器,但我认为这不是我想要的。
Are there any good system facilities for this in Windows XP, or do I need to just use System.Diagnostics.Stopwatch [edit] and write text logs for manual interpretation, or is there something else?
在Windows XP中是否有适用于此的良好系统设施,或者我是否需要使用System.Diagnostics.Stopwatch [编辑]并编写文本日志以进行手动解释,或者还有其他什么?
Edit: is there anything beyond System.Diagnostics.Stopwatch
?
编辑:除了System.Diagnostics.Stopwatch还有什么吗?
6 个解决方案
#1
5
For micro-benchmarking I really like MeasureIt (can be downloaded from http://msdn.microsoft.com/en-us/magazine/cc500596.aspx). It is a test project written by Vance Morrison a Performance Architect on the CLR. It currently has a good set of benchmarks for a number of .Net/CLR core methods. The best part of it is that it is trivial to tweak and add new benchmarks for whatever you would like to test. Simply run "MeasureIt /edit" and it will launch VS with the project for itself so that you can view how those benchmarks are written and add new ones in a similar fashion if you like.
对于微基准测试,我非常喜欢MeasureIt(可以从http://msdn.microsoft.com/en-us/magazine/cc500596.aspx下载)。这是由CLR的性能架构师Vance Morrison编写的测试项目。它目前为许多.Net / CLR核心方法提供了一套很好的基准。最好的部分是,无论你想测试什么,调整和添加新基准都是微不足道的。只需运行“MeasureIt / edit”,它就会自动启动VS项目,以便您可以查看这些基准测试的编写方式,并以类似的方式添加新的基准测试。
As already been stated StopWatch is probably the easiest way to do this and MeasureIt uses StopWatch underneath for its timings but it also does some other things like running a block of code X times and then providing you stats for the runs and what not.
正如已经说过的,StopWatch可能是最简单的方法,而MeasureIt使用下面的StopWatch作为其时间,但它也做了一些其他的事情,比如运行一段代码X次,然后为运行提供统计数据,什么不是。
#2
8
using System.Diagnostics;
....
Stopwatch sw = new Stopwatch();
sw.Start();
// Code you want to time...
// Note: for averaged accuracy (without other OS effects),
// run timed code multiple times in a loop
// and then divide by the number of runs.
sw.Stop();
Console.WriteLine("Took " + sw.ElapsedTicks + " Ticks");
#3
4
If you want just some quick numbers, you can use Powershell to time overall execution. Use the measure-command cmdlet. It's roughly equivalent to "time" in Unix.
如果您只想要一些快速数字,可以使用Powershell来计算整体执行时间。使用measure-command cmdlet。它大致相当于Unix中的“时间”。
> measure-command { your.exe arg1 }
Days : 0
Hours : 0
Minutes : 0
Seconds : 4
Milliseconds : 996
Ticks : 49963029
TotalDays : 5.78275798611111E-05
TotalHours : 0.00138786191666667
TotalMinutes : 0.083271715
TotalSeconds : 4.9963029
TotalMilliseconds : 4996.3029
#4
4
There are quite a few profilers out there. Here are some of the ones I know of:
那里有很多个人。以下是我所知道的一些内容:
- Red Gate's ANTS
- Yourkit's .Net Profiler
- JetBrains dotTrace
红门的蚂蚁
Yourkit的.Net Profiler
If you go on with using System.Diagnostics.Stopwatch, you will be able to instrument and measure only particular points of your code, where you explicitly put the Start/Stop around. This is good enough for measuring specific pieces, like a tight loop or things like that, but it's not going to give you a complete picture of where your program spends most of its time.
如果继续使用System.Diagnostics.Stopwatch,您将能够只测量和测量代码的特定点,您可以在其中明确地设置开始/停止。这足以测量特定的部分,比如紧凑的循环或类似的东西,但它不会让你全面了解你的程序花费大部分时间的位置。
#5
3
This may not be what you want, but dotTrace offers many useful diagnostics and is integrated into Visual Studio.
这可能不是您想要的,但dotTrace提供了许多有用的诊断并集成到Visual Studio中。
#6
1
If your project is quite big and there are lots of modules doing big number of calls you can your: http://www.moduleanalyzer.com/
如果你的项目很大并且有很多模块可以进行大量的通话,你可以:http://www.moduleanalyzer.com/
#1
5
For micro-benchmarking I really like MeasureIt (can be downloaded from http://msdn.microsoft.com/en-us/magazine/cc500596.aspx). It is a test project written by Vance Morrison a Performance Architect on the CLR. It currently has a good set of benchmarks for a number of .Net/CLR core methods. The best part of it is that it is trivial to tweak and add new benchmarks for whatever you would like to test. Simply run "MeasureIt /edit" and it will launch VS with the project for itself so that you can view how those benchmarks are written and add new ones in a similar fashion if you like.
对于微基准测试,我非常喜欢MeasureIt(可以从http://msdn.microsoft.com/en-us/magazine/cc500596.aspx下载)。这是由CLR的性能架构师Vance Morrison编写的测试项目。它目前为许多.Net / CLR核心方法提供了一套很好的基准。最好的部分是,无论你想测试什么,调整和添加新基准都是微不足道的。只需运行“MeasureIt / edit”,它就会自动启动VS项目,以便您可以查看这些基准测试的编写方式,并以类似的方式添加新的基准测试。
As already been stated StopWatch is probably the easiest way to do this and MeasureIt uses StopWatch underneath for its timings but it also does some other things like running a block of code X times and then providing you stats for the runs and what not.
正如已经说过的,StopWatch可能是最简单的方法,而MeasureIt使用下面的StopWatch作为其时间,但它也做了一些其他的事情,比如运行一段代码X次,然后为运行提供统计数据,什么不是。
#2
8
using System.Diagnostics;
....
Stopwatch sw = new Stopwatch();
sw.Start();
// Code you want to time...
// Note: for averaged accuracy (without other OS effects),
// run timed code multiple times in a loop
// and then divide by the number of runs.
sw.Stop();
Console.WriteLine("Took " + sw.ElapsedTicks + " Ticks");
#3
4
If you want just some quick numbers, you can use Powershell to time overall execution. Use the measure-command cmdlet. It's roughly equivalent to "time" in Unix.
如果您只想要一些快速数字,可以使用Powershell来计算整体执行时间。使用measure-command cmdlet。它大致相当于Unix中的“时间”。
> measure-command { your.exe arg1 }
Days : 0
Hours : 0
Minutes : 0
Seconds : 4
Milliseconds : 996
Ticks : 49963029
TotalDays : 5.78275798611111E-05
TotalHours : 0.00138786191666667
TotalMinutes : 0.083271715
TotalSeconds : 4.9963029
TotalMilliseconds : 4996.3029
#4
4
There are quite a few profilers out there. Here are some of the ones I know of:
那里有很多个人。以下是我所知道的一些内容:
- Red Gate's ANTS
- Yourkit's .Net Profiler
- JetBrains dotTrace
红门的蚂蚁
Yourkit的.Net Profiler
If you go on with using System.Diagnostics.Stopwatch, you will be able to instrument and measure only particular points of your code, where you explicitly put the Start/Stop around. This is good enough for measuring specific pieces, like a tight loop or things like that, but it's not going to give you a complete picture of where your program spends most of its time.
如果继续使用System.Diagnostics.Stopwatch,您将能够只测量和测量代码的特定点,您可以在其中明确地设置开始/停止。这足以测量特定的部分,比如紧凑的循环或类似的东西,但它不会让你全面了解你的程序花费大部分时间的位置。
#5
3
This may not be what you want, but dotTrace offers many useful diagnostics and is integrated into Visual Studio.
这可能不是您想要的,但dotTrace提供了许多有用的诊断并集成到Visual Studio中。
#6
1
If your project is quite big and there are lots of modules doing big number of calls you can your: http://www.moduleanalyzer.com/
如果你的项目很大并且有很多模块可以进行大量的通话,你可以:http://www.moduleanalyzer.com/