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
    测试源码下载

  • 相关阅读:
    Bulk insert的用法
    跨服务器与连接不同数据库 不跨服务器连接库存表
    读书笔记(1)
    CSS渲染HTML时的优先级问题
    如何使用as3获得一组不重复的随机数
    flash cs5导出swc到flash builder 4
    转:AS3.0的Dictionary类简介
    转:As3.0中的反射
    Flex 4里的fx、mx以及s命名空间
    yahoo的flash组件
  • 原文地址:https://www.cnblogs.com/blogzys/p/10130971.html
Copyright © 2011-2022 走看看