使用Stopwatch
类可以来确定应用程序的执行时间,在C#中进行字符串截取时,可通过正则的方法截取,也可以通过字符串循环的方截取。通过Stopwatch
类来测试哪种方法执行的时间更短。
正则截取字符串:
/// <summary>
/// 截取字符串,获取数值或变量
/// </summary>
/// <param name="str">字符串</param>
/// <param name="start">开始字符串</param>
/// <param name="end">结束字符串</param>
/// <returns></returns>
public static string CutOut(string str, string start, string end)
{
Regex rg = new Regex("(?<=(" + start + "))[.\\s\\S]*?(?=(" + end + "))", RegexOptions.Multiline | RegexOptions.Singleline);
return rg.Match(str).Value;
}
字符串循环截取字符串:
/// <summary>
/// 截取字符串,获取数值或变量
/// </summary>
/// <param name="sourse">字符串</param>
/// <param name="startstr">开始字符串</param>
/// <param name="endstr">结束字符串</param>
/// <returns></returns>
public static string MidStrEx(string sourse, string startstr, string endstr)
{
string result = string.Empty;
int startindex, endindex;
try
{
startindex = sourse.IndexOf(startstr);
if (startindex == -1)
return result;
string tmpstr = sourse.Substring(startindex + startstr.Length);
endindex = tmpstr.IndexOf(endstr);
if (endindex == -1)
return result;
result = tmpstr.Remove(endindex);
}
catch (Exception ex)
{
throw new ApplicationException("数据异常" + ex.Message);
}
return result;
}
通过Stopwatch
类来测试两种方法的执行时间:
/// <summary>
/// 测试函数执行时间,直接访问字符串指定的方法
/// </summary>
/// <param name="type">函数名</param>
/// <param name="testStr">待处理字符串</param>
/// <param name="startStr">开始字符串</param>
/// <param name="endStr">结束字符串</param>
/// <returns></returns>
public static TimeSpan runTime(string type,string testStr,string startStr,string endStr)
{
Type t = typeof(AjaxController);//括号中的为所要使用的函数所在的类的类名。
MethodInfo mt = t.GetMethod(type);
TimeSpan time = new TimeSpan(0);
if (mt != null)
{
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
//要测试的代码块
string str = (string)mt.Invoke(null, new object[] { testStr,startStr,endStr });
stopWatch.Stop();
time = stopWatch.Elapsed;
}
return time;
}
主方法调用:
using System;
using System.Diagnostics;
using System.Threading;
class Program
{
static void Main(string[] args)
{
string testStr = "<span class=\"end\"></span><img id=\"1611620870664\" src=\"AQAAAQABAAD/2wBDAAMCAgMCAgMDAw\" title =\"打开文件说明文档\" onclick=\"openFileEdit(1611620870664)\" height=\"40px\" weight=\"30px\" style=\"vertical-align:middle;cursor:pointer\"><span class=\"hide\">;title=\"打开文件说明文档\" onclick=\"openFileEdit(1611620870664)\" height=\"40px\" weight=\"30px\" style=\"vertical-align:middle;cursor:pointer\"><span class=\"hide\">;title=\"打开文件说明文档\" onclick=\"openFileEdit(1611620870664)\" height=\"40px\" weight=\"30px\" style=\"vertical-align:middle;cursor:pointer\"><span class=\"hide\">;title=\"打开文件说明文档\" onclick=\"openFileEdit(1611620870664)\" height=\"40px\" weight=\"30px\" style=\"vertical-align:middle;cursor:pointer\"><span class=\"hide\">;";
string testStrTow = "<span class=\"end\"></span><img id=\"1611620870664\" src=\"4d4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBdata:image/jpg;base64,/9j/wYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT/2wBDAQMEBAUEBQkFBQkUDQsNFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBT/wAARCAAoAB8DASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAM\" title =\"打开文件说明文档\" onclick=\"openFileEdit(1611620870664)\" height=\"40px\" weight=\"30px\" style=\"vertical-align:middle;cursor:pointer\"><span class=\"hide\">;title=\"打开文件说明文档\" onclick=\"openFileEdit(1611620870664)\" height=\"40px\" weight=\"30px\" style=\"vertical-align:middle;cursor:pointer\"><span class=\"hide\">;title=\"打开文件说明文档\" onclick=\"openFileEdit(1611620870664)\" height=\"40px\" weight=\"30px\" style=\"vertical-align:middle;cursor:pointer\"><span class=\"hide\">;title=\"打开文件说明文档\" onclick=\"openFileEdit(1611620870664)\" height=\"40px\" weight=\"30px\" style=\"vertical-align:middle;cursor:pointer\"><span class=\"hide\">;";
var timeC = runTime("CutOut", testStr, "src=\"", "\""); //截取的字符串较短
var timeM = runTime("MidStrEX", testStr, "src=\"", "\""); //截取的字符串较短
var timeC1 = runTime("CutOut", testStrTow, "src=\"", "\""); //截取的字符串较长
var timeM1 = runTime("MidStrEX", testStrTow, "src=\"", "\""); //截取的字符串较长
}
}
结果
timeC :{00:00:00.0001441}
timeM:{00:00:00.0001529}
timeC1:{00:00:00.0000950}
timeM1 :{00:00:00.0000243}
结论
通过几轮测试,可以得知,当需要截取的数据较短时,使用正则的方法所执行的时间更短,当需要截取的数据较长时,使用字符串循环的方法所执行的时间更短。
注:Stopwatch
类中还有其他属性值
属性 | 说明 |
---|---|
Elapsed |
获取当前实例测量得出的总运行时间。 |
ElapsedMilliseconds |
获取当前实例测量得出的总运行时间(以毫秒为单位)。 |
ElapsedTicks |
获取当前实例测量得出的总运行时间(用计时器刻度表示)。 |
Running |
获取一个值,该值表示 Stopwatch 计时器是否正在运行。 |