Regex 避免重复创建对象

 

 

总结:频繁调用的方法中,避免创建Regex对象

刚在项目中发现个使用Regex 的问题,在高并发的情况下函数被频繁调用,不恰当的使用Regex,导致cpu 接近90%案例:
namespace TB.General
{
    public class Email
    {
    public static ArrayList GetEmail(string content)
        {
            string pattern = "\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
            ArrayList arrayList = new ArrayList();
            Regex regex = new Regex(pattern, RegexOptions.Compiled);
            MatchCollection matchCollecti
.Compiled参数,但是用法不对,反而导致性能比不使用RegexOptions.Compiled参数还要下降N倍,在高并发的情况下给程序带来了灾难。
正确用法:
namespace TB.General { public class Email { private static Regex regex = new Regex("\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*", RegexOptions.Compiled); public static ArrayList GetEmail(string content) { ArrayList arrayList = new ArrayList(); MatchCollection matchCollection = regex.Matches(content); if (matchCollection.Count != 0) { for (int i = 0; i < matchCollection.Count; i++) { string value = matchCollection[i].Groups[0].Value; if (!arrayList.Contains(value)) { arrayList.Add(value); } } } return arrayList; } } }

 

posted on 2014-08-18 17:25  忙碌ing  阅读(239)  评论(0编辑  收藏  举报

导航