前言
我在上一篇文章《记一次 .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
出品的性能优化工具。优点:功能强大,跨平台,支持多种编程语言。缺点:占用空间太大,对硬件要求高,有一定的使用门槛,不免费。 -
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
等抓取工具同时使用。图形界面极其强大,但是学习曲线比较陡峭,不容易上手。
-
-
google
大佬Bruce Dawson
基于WPT
开发的ETW
捕获工具。开源免费。对WPT
做了一层封装,额外提供了的按键记录功能。他的博客 Random ASCII 有大量高质量的关于性能优化的文章,强烈推荐阅读。
-
微软开发的基于
ETW
的性能分析工具,集抓取和分析于一身的工具。开源免费,绿色免安装,体积小,分析功能强大,虽然图形界面相对薄弱,但是分组过滤功能非常强大。与WPA
一样不太容易上手,但是可以非常方便的获取提示信息,而且有配套的视频教程。尤其适合分析.NET
程序的性能问题。说明:基于
ETW
机制的工具有一个弊端,一般情况下,ETW
是针对整个系统进行收集的,不太适合长时间采集,在采集之前一定要想好要收集哪些信息。
我电脑中必备的工具有 P