使用CallerMemberName/CallerFilePathAttribute/CallerLineNumber属性会如何影响应用程序的性能?这是在应用程序中编译的东西,还是与反射相关的东西,还是其他东西?

我正计划做类似的事情:

public void DoProcessing()
{
    TraceMessage("Something happened.");
}

public void TraceMessage(string message,
        [System.Runtime.CompilerServices.CallerMemberName] string memberName = "",
        [System.Runtime.CompilerServices.CallerFilePath] string sourceFilePath = "",
        [System.Runtime.CompilerServices.CallerLineNumber] int sourceLineNumber = 0)
{
    System.Diagnostics.Trace.WriteLine("message: " + message);
    System.Diagnostics.Trace.WriteLine("member name: " + memberName);
    System.Diagnostics.Trace.WriteLine("source file path: " + sourceFilePath);
    System.Diagnostics.Trace.WriteLine("source line number: " + sourceLineNumber);
}

https://learn.microsoft.com/en-us/dotnet/api/system.runtime.compilerservices.callermembernameattribute?view=net-7.0&redirectedfrom=MSDN

推荐答案

此属性由编译器处理,即TraceMessage("Something happened.");将由编译器替换为类似以下内容:

TraceMessage("Something happened.", "DoProcessing", "some_file_path", 6);

您可以查看反编译@sharplab

这是在应用程序中编译的内容吗

或者与反思相关的东西,或者其他东西?

不,没有倒影.

Csharp相关问答推荐

从C#重新启动Shell脚本时处理错误?

具有多个应用程序服务器的Azure Signal

List T.AddRange在传递ConcurrentDictionary作为参数时引发ArgumentExcellent

EF Core. Income和. AsNoTracking正确用法

`Task`只有在C#中等待时才会运行吗?

Select Many和默认IfEmpty内部Select Many错误工作

创建临时Collection 最有效的方法是什么?堆栈分配和集合表达式之间的区别?

Blazor WebApp:原始异常:AADSTS700025:客户端是公共的,因此既不应显示客户端,也不应显示客户端

在命名管道上使用GRPC ASP.NET核心时如何配置命名管道权限

Razor视图Razor页面指向同一端点时的优先级

取决于您的数据量的多个嵌套循环

在C#中反序列化/序列化具有混合元素顺序的XML时出现问题

是否有必要在ASP.NET Core中注册可传递依赖项?

等待一个等待函数

无法使用[FromForm]发送带有图像和JSON的多部分请求

如何让游戏对象在切换场景时被销毁,但在开始新游戏时重新锁定

从Base64转换为不同的字符串返回相同的结果

用于请求用户返回列表的C#Google API

如何正确地在VB中初始化类?

游戏对象走向不同的方向