【问题标题】:Performance impact due to StackTrace constructor and getting method nameStackTrace 构造函数和获取方法名称对性能的影响
【发布时间】:2015-11-04 17:35:54
【问题描述】:

我的日志库中有这段代码

var stackTrace = new StackTrace();
string operationName = stackTrace.GetFrame(1).GetMethod().Name;

根据我使用 PerfView 工具进行的性能分析,它显示为

有人知道我添加的代码对性能的影响吗? 如果是,有没有其他方法可以让我获得方法名称而不会对性能产生更大的影响?

我目前在 4 核机器上以 1000 TPS 的速度运行它。而且我看到它使用了我 15.1% 的 CPU

【问题讨论】:

    标签: c# performance perfview


    【解决方案1】:

    从 C# 5 开始,绝对最好让编译器将其烘焙到调用站点,而不是使用 [CallerMemberName]

    public void Log(string message, [CallerMemberName] caller = null)
    {
    }
    

    然后:

    public void DoSomething()
    {
        logger.Log("A message");
    }
    

    ...被C#编译器转换成

    public void DoSomething()
    {
        logger.Log("A message", "DoSomething");
    }
    

    【讨论】:

    • 很好的解决方案,谢谢。将使用此代码验证性能并回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 2023-03-17
    相关资源
    最近更新 更多