记一次 .NET 程序的性能优化实战(2)—— 使用 perfview 找出 Regex 慢的根本原因

本文详细记录了一次.NET程序性能优化的过程,重点在于如何使用PerfView工具找出正则表达式(Regex)导致的性能瓶颈。通过采集性能数据、查看调用栈和JIT编译情况,发现每次Regex匹配都会导致动态代码生成,影响性能。通过修改为静态正则表达式或使用全局变量,显著提升了程序运行效率。
摘要由CSDN通过智能技术生成

前言

我在上一篇文章《记一次 .NET 程序的性能优化实战(1)—— 使用 process explorer 快速定位问题代码》中用 process explorer 定位到了导致程序运行缓慢的原因——使用了 .NET 中的正则表达式。.NET 中的正则表达式真这么慢吗?带着疑问,开始了本次的探索之旅。喜欢刨根问底的小伙伴儿快来一起看看吧!

在开始之前,我还是把关键函数贴一下,大家也可以看看到底哪里写的有问题。代码如下:

private static bool IsSplitter(string curLine)
{
  var splitterRegex = new Regex(@"-{100,}", RegexOptions.Compiled | RegexOptions.IgnoreCase);
  MatchCollection matches = splitterRegex.Matches(curLine);
  return (matches.Count > 0);
}

选择优化工具

不知道都使用过哪些性能优化工具呢?我主要专注于 windows 下的 c/c++/c# 开发,不涉及其它语言,也不涉及其它平台。这里列举几个我用过的性能优化工具。

  • intel vtune

    intel 出品的性能优化工具。优点:功能强大,跨平台,支持多种编程语言。缺点:占用空间太大,对硬件要求高,有一定的使用门槛,不免费。

  • visual studio

    高版本的 vs 自带性能分析工具(应该从 vs2013 就有了?),但是我很少用 vs 来分析性能问题。

  • process monitor
    嗯,你没看错,process monitor 不仅可以用来排错,也可以用来做性能分析,只不过不适合源码级别的性能分析。我也很少用它来分析性能问题,主要用来排错。

  • .NET 相关的性能优化工具。

  • 基于 ETW (Event Trace for Windows) 的各种工具,适用于原生和托管程序。

    • perfmon

      windows 系统自带的基于 ETW 的性能分析工具,真正的免安装。

    • WPR/WPRUI/xperf

      微软性能分析工具集(Windows Performance Toolkit)提供的 ETW 捕获工具,可以使用 WPA 等性能分析工具进行查看。

    • WPA (Windows Performance Analyzer)

      微软性能分析工具集提供性能分析工具,与 WPR 等抓取工具同时使用。图形界面极其强大,但是学习曲线比较陡峭,不容易上手。

  • UIforETW

    google 大佬 Bruce Dawson 基于 WPT 开发的 ETW 捕获工具。开源免费。对 WPT 做了一层封装,额外提供了的按键记录功能。

    他的博客 Random ASCII 有大量高质量的关于性能优化的文章,强烈推荐阅读。

  • PerfView

    微软开发的基于 ETW 的性能分析工具,集抓取和分析于一身的工具。开源免费,绿色免安装,体积小,分析功能强大,虽然图形界面相对薄弱,但是分组过滤功能非常强大。与 WPA 一样不太容易上手,但是可以非常方便的获取提示信息,而且有配套的视频教程。尤其适合分析 .NET 程序的性能问题。

    说明:基于 ETW 机制的工具有一个弊端,一般情况下,ETW 是针对整个系统进行收集的,不太适合长时间采集,在采集之前一定要想好要收集哪些信息。

我电脑中必备的工具有 P

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值