博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
高压力下正则表达式的性能瓶颈
阅读量:4561 次
发布时间:2019-06-08

本文共 2180 字,大约阅读时间需要 7 分钟。

最近在做公司的系统,每秒要接受网络的数据在130条左右,对过长的数据进行截取,使用的方法是:

     ///         /// 截断字符串        ///         /// 最大长度        /// 原字符串        /// 
public static string LeftString(int maxLength, string str) { if (string.IsNullOrEmpty(str)) return ""; if (maxLength < 0) return str; string temp = str; if (Regex.Replace(temp, "[\u4e00-\u9fa5]", "zz", RegexOptions.IgnoreCase).Length <= maxLength) { return temp; } for (int i = temp.Length; i >= 0; i--) { temp = temp.Substring(0, i); if (Regex.Replace(temp, "[\u4e00-\u9fa5]", "zz", RegexOptions.IgnoreCase).Length <= maxLength - 3) { return temp + "..."; } } return "..."; } 在使用中,系统的cpu一直居高不下,主要集中在w3wp,经常达到70%-80%,服务器经常出现预警。期间百思不得其解,后经过多方排除,替换了这个方法:
///         /// 截取字符串        ///         ///         ///         /// 
public static string LeftStringExt(string str, int length) { int p_num = 0; int i; string New_Str_value = ""; if (str == "") { New_Str_value = ""; } else { int Len_Num = str.Length; for (i = 0; i <= Len_Num - 1; i++) { if (i > Len_Num) break; char c = Convert.ToChar(str.Substring(i, 1)); if (((int)c > 255) || ((int)c < 0)) p_num = p_num + 2; else p_num = p_num + 1; if (p_num >= length) { New_Str_value = str.Substring(0, i + 1); break; } else { New_Str_value = str; } } } return New_Str_value; }

  现在w3wp的cpu基本控制在3%-4%之间。

  后来在网上查了一下,发现正则表达式有性能问题,普遍要比普通的方法要慢十几-二十几倍。所以在大数据高并发的情况下要尽量规避使用正则表达式

 

  

转载于:https://www.cnblogs.com/songafeng/p/3989319.html

你可能感兴趣的文章
雷林鹏分享: C# 简介
查看>>
ORA-12505: TNS: 监听程序当前无法识别连接描述符中所给出的SID等错误解决方法
查看>>
实用类-<Math类常用>
查看>>
构建之法阅读笔记之四
查看>>
10.15习题2
查看>>
Windows Server 2008 R2 备份与恢复详细实例
查看>>
Ubuntu上kubeadm安装Kubernetes集群
查看>>
关于java学习中的一些易错点(基础篇)
查看>>
MFC的多国语言界面的实现
查看>>
四则运算个人项目 最终版
查看>>
java线程系列---java5中的线程池
查看>>
SQL表连接
查看>>
新秀系列C/C++经典问题(四)
查看>>
memset函数具体说明
查看>>
经常使用的android弹出对话框
查看>>
确保新站自身站点设计的合理性的六大注意点
查看>>
1033. 旧键盘打字(20)
查看>>
The Zen of Python
查看>>
git安装及使用
查看>>
mysql一个非常实用解决sql查询优化的函数explain
查看>>