zoukankan      html  css  js  c++  java
  • IndexOf() LastIndexOf() Contains() StartsWith() EndsWith()方法比较

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    using System.Diagnostics;
     
    namespace CA100
    {
        class Program
        {
            //循环次数:5百万次
            const int COUNT = 5000000;
            //外围循环次数:5次
            const int NUM = 5;
            //准确测量运行时间
            static Stopwatch sWatch = new Stopwatch();
            //每项时间
            static long t1, t2;
            //记录日志
            static StringBuilder sb = new StringBuilder();
     
            static void Main()
            {
                string src = "C#测试IndexOf()LastIndexOf()Contains()StartsWith()EndsWith()5个方法的效率.";
                Console.WriteLine("测试的字符串是:" + src + ",测试次数" + COUNT);
                sb.AppendLine("测试的字符串是:" + src + ",测试次数" + COUNT);
                string str = "C";
                //每项循环测试5次
                  int i = 0;
                Console.WriteLine(" 'C'出现在首位时: ");
                sb.AppendLine(" 'C'出现在首位时: ");
                for (; i < NUM; i++)
                {
                    Console.WriteLine("当前循环第{0}次 ", i + 1);
                    sb.AppendLine("当前循环第" + (i + 1) + "次");
                    t1 += IndexOf(src, str);
                    t2 += StartsWith(src, str);
                    Console.WriteLine();
                    sb.AppendLine();
                }
                Console.WriteLine("IndexOf总时间:" + t1 + ",平均时间:" + t1 / NUM);
                sb.AppendLine("IndexOf总时间:" + t1 + ",平均时间:" + t1 / NUM);
                Console.WriteLine("StartsWith总时间:" + t2 + ",平均时间:" + t2 / NUM);
                sb.AppendLine("StartsWith总时间:" + t2 + ",平均时间:" + t2 / NUM);
                Console.WriteLine();
                sb.AppendLine();
                t1 = 0;
                t2 = 0;
     
                str = "StartsWith";
                Console.WriteLine("'StartsWith'出现在中间: ");
                sb.AppendLine("'StartsWith'出现在中间: ");
                for (i = 0; i < NUM; i++)
                {
                    Console.WriteLine("当前循环第{0}次 ", i + 1);
                    sb.AppendLine("当前循环第" + (i + 1) + "次");
                    t1 += IndexOf(src, str);
                    t2 += Contains(src, str);
                    Console.WriteLine();
                    sb.AppendLine();
                }
     
                Console.WriteLine("IndexOf总时间:" + t1 + ",平均时间:" + t1 / NUM);
                sb.AppendLine("IndexOf总时间:" + t1 + ",平均时间:" + t1 / NUM);
                Console.WriteLine("Contains总时间:" + t2 + ",平均时间:" + t2 / NUM);
                sb.AppendLine("Contains总时间:" + t2 + ",平均时间:" + t2 / NUM);
                Console.WriteLine();
                sb.AppendLine();
                t1 = 0;
                t2 = 0;
     
                str = ".";
                Console.WriteLine("'.'出现在末尾: ");
                sb.AppendLine("'.'出现在末尾: ");
                for (i = 0; i < NUM; i++)
                {
                    Console.WriteLine("当前循环第{0}次 ", i + 1);
                    sb.AppendLine("当前循环第" + (i + 1) + "次");
                    t1 += LastIndexOf(src, str);
                    t2 += EndsWith(src, str);
                    Console.WriteLine();
                    sb.AppendLine();
                }
     
                Console.WriteLine("LastIndexOf总时间:" + t1 + ",平均时间:" + t1 / NUM);
                sb.AppendLine("LastIndexOf总时间:" + t1 + ",平均时间:" + t1 / NUM);
                Console.WriteLine("EndsWith总时间:" + t2 + ",平均时间:" + t2 / NUM);
                sb.AppendLine("EndsWith总时间:" + t2 + ",平均时间:" + t2 / NUM);
                Console.WriteLine();
                sb.AppendLine();
     
                Console.WriteLine("测试结束!");
                sb.AppendLine("测试结束!");
     
                File.AppendAllText(@"d: esults.txt", sb.ToString());
                Console.ReadLine();
            }
     
            static long IndexOf(string src, string str)
            {
                sWatch.Reset();
                sWatch.Start();
                for (int i = 0; i < COUNT; i++)
                {
                    src.IndexOf(str);
                }
                sWatch.Stop();
     
                Console.WriteLine("IndexOf花费: " + sWatch.ElapsedMilliseconds + "ms");
                sb.AppendLine("IndexOf花费: " + sWatch.ElapsedMilliseconds + "ms");
                return sWatch.ElapsedMilliseconds;
            }
     
            static long LastIndexOf(string src, string str)
            {
                sWatch.Reset();
                sWatch.Start();
                for (int i = 0; i < COUNT; i++)
                {
                    src.LastIndexOf(str);
                }
                sWatch.Stop();
     
                Console.WriteLine("LastIndexOf花费: " + sWatch.ElapsedMilliseconds + "ms");
                sb.AppendLine("LastIndexOf花费: " + sWatch.ElapsedMilliseconds + "ms");
                return sWatch.ElapsedMilliseconds;
            }
     
            static long StartsWith(string src, string str)
            {
                sWatch.Reset();
                sWatch.Start();
                for (int i = 0; i < COUNT; i++)
                {
                    src.StartsWith(str);
                }
                sWatch.Stop();
     
                Console.WriteLine("StartsWith花费: " + sWatch.ElapsedMilliseconds + "ms");
                sb.AppendLine("StartsWith花费: " + sWatch.ElapsedMilliseconds + "ms");
                return sWatch.ElapsedMilliseconds;
            }
     
            static long EndsWith(string src, string str)
            {
                sWatch.Reset();
                sWatch.Start();
                for (int i = 0; i < COUNT; i++)
                {
                    src.EndsWith(str);
                }
                sWatch.Stop();
     
                Console.WriteLine("EndsWith花费: " + sWatch.ElapsedMilliseconds + "ms");
                sb.AppendLine("EndsWith花费: " + sWatch.ElapsedMilliseconds + "ms");
                return sWatch.ElapsedMilliseconds;
            }
     
            static long Contains(string src, string str)
            {
                sWatch.Reset();
                sWatch.Start();
                for (int i = 0; i < COUNT; i++)
                {
                    src.Contains(str);
                }
                sWatch.Stop();
     
                Console.WriteLine("Contains花费: " + sWatch.ElapsedMilliseconds + "ms");
                sb.AppendLine("Contains花费: " + sWatch.ElapsedMilliseconds + "ms");
                return sWatch.ElapsedMilliseconds;
            }
        }
    }

    针对三种情况

    1.判断以字符串开头

    IndexOf和StartsWith

    2.判断是否包含字符串

    IndexOf和Contains

    3.判断以字符串结尾

    LastIndexOf和EndsWith

    测试以某字符串为开头,以使用IndexOf为最佳,有时,StartsWith也会比IndexOf快,几率较低。

    测试包含字符串,以Contains最佳。

    测试以某字符串结尾,虽然LastIndexOf速度略快,但是不好判定,还是采用EndsWith为最佳。

    [C#] 纯文本查看 复制代码
    01
    02
    03
    04
    05
    06
    07
    08
    09
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    public partial class Form1 : Form
       {
           public Form1()
           {
               InitializeComponent();
           }
           string url = "http://www.0398jobs.com/index.htm";
           private void Form1_Load(object sender, EventArgs e)
           {
     
           }
           //
           private void button1_Click(object sender, EventArgs e)
           {
               label1.Text = string.Empty;
               DateTime st = DateTime.Now;
               for (int i = 0; i < 10000; i++)
               {
                   if (url.IndexOf("job.com") > 0 || url.IndexOf("jobs.com") > 0)
                   {
     
                   }
               }
               label1.Text = (DateTime.Now - st).Milliseconds.ToString();
           }
           //Contains
           private void button2_Click(object sender, EventArgs e)
           {
               label1.Text = string.Empty;
               DateTime st = DateTime.Now;
               for (int i = 0; i < 10000; i++)
               {
                   if (url.Contains("job.com") || url.Contains("jobs.com"))
                   {
     
                   }
               }
               label1.Text = (DateTime.Now-st).Milliseconds.ToString();
           }
       }



    看测试后的效果

    IndexOf执行五次

    [C#] 纯文本查看 复制代码
    01
    02
    03
    04
    05
    06
    38毫秒
    36 毫秒
    37毫秒
    36毫秒
    36毫秒
    39毫秒



    Contains执行五次

    [C#] 纯文本查看 复制代码
    01
    02
    03
    04
    05
    06
    3毫秒
    2 毫秒
    2毫秒
    3毫秒
    2毫秒
    2毫秒



    差距这么大我就不多说了,大家一看就明白
    Contains的性能要远远的超出IndexOf
    测试源码下载

  • 相关阅读:
    linux下nginx+php+mysql环境搭建
    Linux下配置安装PHP环境
    什么是Apache APR
    全端之Jquery--操作属性
    全端之jQuery基本语法
    全端之Javascript(操作DOM对象二)
    全端之Javascript(DOM对象三)
    全端之Javascript(DOM对象一)
    全端之Javascript对象
    全端开发——css(操作属性补充)
  • 原文地址:https://www.cnblogs.com/blogzys/p/10130971.html
Copyright © 2011-2022 走看看