我使用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]
属性添加到入口点函数中。
这可能吗?如果是的话,我将非常感谢我为实现它而提供的每一个提示。
答案 0 :(得分:2)
属性不会改变代码的执行方式。您应该自己,从头开始,using Stopwatch
或任何其他本地或第三方实用程序,在服务器代码中实施此时间测量。
处理嵌套调用也很困难。
一般来说,看起来你正在重新发明轮子 - 有一种名为" profiler"的软件。它将在运行时分析代码的执行时间,内存消耗和其他特征。例如,您可以使用JetBrains DotTrace。