我已经在很多类中编写了一个包含许多方法的大型C#应用程序。
我正在尝试记录所调用的内容以及开发过程中的频率。 (我在数据库中保留记录)
使用以下调用填充每个方法:
void myMethod()
{
log(entering,args[]);
log(exiting,args[]);
}
由于我想为我的所有方法执行此操作,是否有更好的方法来执行此操作,然后必须在每个方法中复制这些代码行?
答案 0 :(得分:5)
这是他们头版的第一个例子:
public class TraceAttribute : OnMethodBoundaryAspect
{
public override void OnEntry( MethodExecutionEventArgs eventArgs)
{ Trace.TraceInformation("Entering {0}.", eventArgs.Method); }
public override void OnExit( MethodExecutionEventArgs eventArgs)
{ Trace.TraceInformation("Leaving {0}.", eventArgs.Method); }
}
似乎正是你所需要的!
答案 1 :(得分:1)
好吧,您可以在类上使用某种类型的Decorator来记录事物,但我认为更好的方法是在构建和/或单元测试过程中使用某种类型的分析工具。您可以很容易地从CruiseControl中的一些简单的度量标准集合中获得很多价值。
答案 2 :(得分:1)
你需要一个探查器。 C#有两个“主要”的。 JetBrains“dotTrace”和“YourKit”都很好,但我更喜欢YourKit。这是一项很好的投资。我想你会发现你不会经常使用它......但是当你需要它时它们很棒。
答案 3 :(得分:1)
如果你真正 之后
就在今天早上,有人发给我一个非常大的数据集,可以在我们公司正在构建的大型C#应用程序中运行。它太慢了我几乎无法抗拒它。
由于我在VS IDE下运行,我只是暂停了几次并查看它在做什么以及为什么。它正在做一些无法记录或猜测的东西。修复很简单,加速很快。
当性能问题不那么糟糕时,可能需要多个样本才能找到它们,但它总是有效并且不会更简单。