Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 创建用于度量代码执行时间的自定义属性_C# - Fatal编程技术网

C# 创建用于度量代码执行时间的自定义属性

C# 创建用于度量代码执行时间的自定义属性,c#,C#,如果可能的话,我会使用C#和woundering创建一个自定义属性来度量代码的执行时间 我会解释的。假设您有类任务: public class Task { public void Run() { Do1(); Do2(); // ... } public void Do1() { // ... Thread.sleep(10); // Dummy } pu

如果可能的话,我会使用C#和woundering创建一个自定义属性来度量代码的执行时间

我会解释的。假设您有类
任务

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]
属性


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

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

处理嵌套调用也将非常困难


总的来说,看起来你是在重新发明轮子——有一种叫做“探查器”的软件。它将在运行时分析代码的执行时间、内存消耗和其他特征。例如,您可以使用JetBrains DotTrace

属性不会更改代码的执行方式。您应该自己在服务器代码中实现这一时间测量,从头开始,或者任何其他本机或第三方实用程序

处理嵌套调用也将非常困难


总的来说,看起来你是在重新发明轮子——有一种叫做“探查器”的软件。它将在运行时分析代码的执行时间、内存消耗和其他特征。例如,您可以使用JetBrains DotTrace

大家好,谢谢你的回答。我知道秒表的种类和使用方法。这个问题是我“学习”的一部分。我知道我可以使用即用探查器。只是想知道是否有可能自己创建一个迷你探查器。@no1lives4当然有。只需在方法执行前后向服务器代码添加一个检查:如果有这样的属性,请测量时间并将其输出到某处。如何做到这一点取决于您的服务器体系结构。@no1lives4是否应该有一些用于“装饰”方法的库(因此添加一些基准测试代码)。我从来没用过它。。。或者你可以用Fody修改编译后的程序来添加基准代码。嗨,谢谢你的回答。我知道秒表的种类和使用方法。这个问题是我“学习”的一部分。我知道我可以使用即用探查器。只是想知道是否有可能自己创建一个迷你探查器。@no1lives4当然有。只需在方法执行前后向服务器代码添加一个检查:如果有这样的属性,请测量时间并将其输出到某处。如何做到这一点取决于您的服务器体系结构。@no1lives4是否应该有一些用于“装饰”方法的库(因此添加一些基准测试代码)。我从来没用过它。。。或者您可以使用Fody修改编译后的程序以添加基准代码。