创建自定义属性以测量代码执行时间

时间:2018-06-06 09:53:33

标签: c#

我使用C#并且想知道是否可以创建一个测量代码执行时间的自定义属性。

我会解释。假设您有班级Task

public class Task
{
    public void Run()
    {
        Do1();
        Do2();
        // ...
    }

    public void Do1()
    {
        // ...
        Thread.sleep(10); // Dummy
    }

    public void Do2()
    {
        // ...
        Thread.sleep(5); // Dummy
    }
}

主文件:

public static void Main()
{
    Task task = new Task();
    task.Run();
}

现在,我在我的服务器上运行此代码并感觉它的运行速度太慢(然后我预期)。所以我使用我的全新属性来衡量执行时间 - 让我们称之为MeasuringTimeAttribute

[MeasuringTime]
public void Run()
{
    // ...
}

再次运行代码时,我希望它生成如下所示的报告:

Run() - Took 15s
    Run().Do1() - Took 10s
    Run().Do2() - Took 5s

基本思想是,即使我有超过2个级别(如本例所示),它也会测量我的代码。此外,无论它运行什么代码。我所要做的就是将[MeasuringTime]属性添加到入口点函数中。

这可能吗?如果是的话,我将非常感谢我为实现它而提供的每一个提示。

1 个答案:

答案 0 :(得分:2)

属性不会改变代码的执行方式。您应该自己,从头开始,using Stopwatch或任何其他本地或第三方实用程序,在服务器代码中实施此时间测量。

处理嵌套调用也很困难。

一般来说,看起来你正在重新发明轮子 - 有一种名为" profiler"的软件。它将在运行时分析代码的执行时间,内存消耗和其他特征。例如,您可以使用JetBrains DotTrace。