gpt4 book ai didi

C# 使用属性为函数计时

转载 作者:IT王子 更新时间:2023-10-29 04:44:27 26 4
gpt4 key购买 nike

我想使用属性为函数计时。我想做这样的事情:

[TimeIt]
public MyFunc()
{
//do something
...
return;
}

执行此函数时,如果函数所用时间超过阈值,则该属性应使用 log4net 记录时间。

这类似于 MVC ActionFilterAttribute 所做的,除了我不想使用 MVC。

最佳答案

属性(除了极少数异常(exception),例如 [PrincipalPermission] 由运行时本身发现)元数据;所以不要导致额外的代码神奇地被调用。异常(exception)情况是通过像 PostSharp 这样的工具,在构建时找到这样的属性并编织额外的代码。

在所有其他情况下,您必须通过反射自己检查此属性,并编写代码以从属性中调用额外的方法。这就是 ASP.NET MVC 所做的;它识别预期的属性系列并调用基类方法来触发您的过滤器。

如果您正在编写插件框架,这可能有意义。如果它用于临时方法检测 - 如果您不自己添加额外代码,这将无法工作。

可能更容易的是编写一个 IDisposable 类型,在处理它时写入耗时;那么你可以这样做:

using(new MyTimer("My label")) {
//... Your method
}

也许对 using 有轻微的滥用,但它应该有效。

关于C# 使用属性为函数计时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4479329/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com