我是一个完全的新手,但我在使用C#处理字符串时写了一个小程序,发现如果做一些不同的事情,代码的执行速度会显著提高。
那么,你如何计算代码的执行速度呢?是否有任何(免费)工具可以使用?或者您还是老派的使用System.Timer自己计时?
我是一个完全的新手,但我在使用C#处理字符串时写了一个小程序,发现如果做一些不同的事情,代码的执行速度会显著提高。
那么,你如何计算代码的执行速度呢?是否有任何(免费)工具可以使用?或者您还是老派的使用System.Timer自己计时?
您所描述的是性能分析。有许多程序可用于此,例如Jetbrains profiler或Ants profiler,尽管大多数在测量性能时会减慢应用程序的速度。
要手动编写性能分析,可以使用System.Diagnostics.Stopwatch和简单的Console.WriteLine,就像您所描述的那样。
还要注意,C# JIT编译器根据调用类型和频率对代码进行优化,因此可以尝试不同大小的循环和方法(如递归调用)来确定最佳方案。
RedGate的ANTS Profiler 是一个非常好的性能分析工具。 JetBrains的dotTrace Profiler 也很棒。这些工具可以让您查看可钻取到每个单独行的性能指标。
ANTS Profiler 的截图:ANTS http://www.red-gate.com/products/ants_profiler/images/app/timeline_calltree3.gif
如果您想要确保特定方法在单元测试期间保持在特定的性能阈值内,我建议使用Stopwatch
类监视一个方法的执行时间一次或多次循环,并计算平均值,然后使用Assert
来检查结果。
提醒一下 - 确保编译时选择Relase,而不是Debug!(我见过有经验的开发人员犯这个错误 - 很容易忘记)。
使用分析器。
如果您只需要计时一个特定的方法,Stopwatch类可能是一个不错的选择。
这是一个简单的示例,用于测试代码速度。我希望能帮到你。
class Program {
static void Main(string[] args) {
const int steps = 10000;
Stopwatch sw = new Stopwatch();
ArrayList list1 = new ArrayList();
sw.Start();
for(int i = 0; i < steps; i++) {
list1.Add(i);
}
sw.Stop();
Console.WriteLine("ArrayList:\tMilliseconds = {0},\tTicks = {1}", sw.ElapsedMilliseconds, sw.ElapsedTicks);
MyList list2 = new MyList();
sw.Start();
for(int i = 0; i < steps; i++) {
list2.Add(i);
}
sw.Stop();
Console.WriteLine("MyList: \tMilliseconds = {0},\tTicks = {1}", sw.ElapsedMilliseconds, sw.ElapsedTicks);
有一个本地的.NET选项(软件开发团队版)可能可以满足一些性能分析需求。从2005 .NET IDE菜单中,选择工具->性能工具->性能向导...
[GSS可能是正确的,您必须拥有团队版]
您可以使用StopWatch类来计时方法。请记住,由于代码需要被JIT编译,因此第一次运行通常会比较慢。