【发布时间】:2018-11-08 11:22:01
【问题描述】:
我需要知道函数何时被调用以及函数何时结束。 否则,我需要在每次更改“StackTrace.FrameCount”时进行检测。
我的想法是将我的函数插入“StackTrace.FrameCount”的 Setter 并重定向到 FrameCount 的基本函数,但是...... 问题是,“StackTrace.FrameCount”只有一个 GETTER。
//
// Zusammenfassung:
// Gets the number of frames in the stack trace.
//
// Rückgabewerte:
// The number of frames in the stack trace.
public virtual int FrameCount { get; }
是否有可能制作一个 PropertyChangedEventHandler 或其他东西来管理这个问题?
非常感谢! :)
托马斯
【问题讨论】:
-
您能告诉我们您为什么要这样做的背景吗? 如果有替代解决方案。您使用的是哪个版本的 .NET Core?
-
我需要做一个“Performance-Watch”,每个功能花费了多少时间。现在非常困难,因为我需要在函数的开头和结尾插入一个方法调用。我使用 .Net-Core 2.1。
-
没有办法像您希望的那样简单,因为代码运行时不会维护包含当前堆栈跟踪的任何内容,而是按需生成堆栈跟踪。请说明您正在尝试解决哪个问题,这是一个解决方案,必须有一种不同且更好的方法来完成您想要的。
-
通常,性能分析器会以每秒 N 次的速度对每个线程当前所处的位置进行快照,并从中构造调用堆栈,或者通过向每个方法入口和出口添加代码来检测代码。我不知道如何做前者,后者可以通过 mono.cecil 或 ildasm/ilasm 或类似的方法来完成。无论哪种方式,这将是一个很好的工作部分。您确定没有现有的工具可供您使用,例如 dotTrace 吗?
-
我假设您正在寻找一些 AOP 方法来拦截方法调用,请查看 MethodBoundaryAspect.Fody (github.com/vescon/MethodBoundaryAspect.Fody),我们使用它通过使用自定义属性装饰方法来实现性能检查。
标签: c# windows visual-studio .net-core