public void 性能测试()
{
string res = "<?xml version=\"1.0\" encoding=\"utf-16\"?>\r\n<xxxMsg xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\r\n <Message>10</Message>\r\n <Time>2014-04-30T15:26:15.3256946+08:00</Time>\r\n <SyncPointTagName>ddddd</SyncPointTagName>\r\n <TerminalCode>50001334</TerminalCode>\r\n</xxxMsg>";
//100万次计算
var arr = System.Linq.Enumerable.Range(1, 1000000);
//方法1
Action act = () => { foreach (var k in arr) { forFun(res); } };
//方法2
Action act2 = () => { foreach (var k in arr) { forRegx(res); } };
//fro 用时7860
System.Diagnostics.Debug.WriteLine("fro 用时" + Stopwatch(act));
//regx 用时1056
System.Diagnostics.Debug.WriteLine("regx 用时" + Stopwatch(act2));
}
/// <summary>
/// 用for查找
/// </summary>
/// <param name="res"></param>
protected void forFun(string res)
{
//这东西写到外部,效率应该会高一点点
string msg = string.Empty;
string tag = "<Message>";
int startindex =res.IndexOf(tag) + tag.Length;
int endindex = -1;
for (int k = startindex; k < res.Length; k++)
{
char curchar = res[k];
if (curchar >= 48 && curchar <= 57)
{
endindex = k;//这里还可以用msg+=curchar ;
} else { break; } } msg = res.Substring(startindex, endindex - startindex); } /// <summary> /// 正则查找 /// </summary> /// <param name="res"></param> protected void forRegx(string res) { //这东西写到外部,效率应该会高一点点 string msg = string.Empty; string tag = "<Message>"; msg = System.Text.RegularExpressions.Regex.Match(res, tag + "\\d{1,}").Value; } /// <summary> /// 测试运行时间 /// </summary> /// <param name="method">需要执行的方法</param> /// <param name="summary">对方法的说明</param> /// <returns>返回,这个方法执行用了多少毫秒</returns> public static long Stopwatch(Action method) { System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch(); watch.Restart(); //运行方法 method.Invoke(); watch.Stop(); return watch.ElapsedMilliseconds; } /// <summary> /// 测试运行时间 /// </summary> /// <param name="method">需要执行的方法</param> /// <param name="obj">参数对像</param> /// <returns>返回,这个方法执行用了多少毫秒</returns> public static long Stopwatch<T>(Action<T> method, T obj) { return Stopwatch(new Action(() => { method.Invoke(obj); })); }可以看到,,,,使用正则表达式的结果需要10秒左右,而使用indexof 的搜索只需要7秒多.