http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 14900|回复: 5
打印 上一主题 下一主题

[性能] C#关于string的IndexOf和Contains的性能测试

[复制链接]
跳转到指定楼层
楼主
发表于 2015-2-3 09:59:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以下是测试代码大家一看就明白了

[C#] 纯文本查看 复制代码
 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#] 纯文本查看 复制代码
38毫秒
36 毫秒
37毫秒
36毫秒
36毫秒
39毫秒


Contains执行五次
[C#] 纯文本查看 复制代码
3毫秒
2 毫秒
2毫秒
3毫秒
2毫秒
2毫秒


差距这么大我就不多说了,大家一看就明白
Contains的性能要远远的超出IndexOf
测试源码下载
WindowsFormsApplication1.zip (48.36 KB, 下载次数: 46)





1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
沙发
发表于 2015-2-3 12:32:17 | 只看该作者
膜拜中....!
回复

使用道具 举报

板凳
发表于 2015-2-3 15:21:08 | 只看该作者
受教了学习中……
地板
发表于 2015-2-12 11:52:48 | 只看该作者
性能测试并不是简单的时间快慢检测,时间+硬件负载。因为有时候执行快可能是高负载。
还有时间测试用微软自带的Stopwatch,可以再专业一些,用DateTime本身计算也会产生性能的消耗
5
 楼主| 发表于 2015-2-12 13:45:13 | 只看该作者
yajore 发表于 2015-2-12 11:52
性能测试并不是简单的时间快慢检测,时间+硬件负载。因为有时候执行快可能是高负载。
还有时间测试用微软 ...

你说这个DateTime会消耗这个完全没错,但是你忽略了,两边的效果是一样的,并不是一边用的DateTime另外一边没有用。至于硬件负荷,同样的程序,再说两这样的两个程序,基本上受不到他们的影响,
我测试的这些肯定不是一次测试,更加不会有什么高负荷,这个多虑了。很明显的道理就没有必要般那些专业的测试工具了。

这个相差不是一点半点的 而是几十倍
6
发表于 2015-3-12 14:07:42 | 只看该作者
因为  IndexOf使用的是 StringComparison.CurrentCulture 规则    contain使用的是StringComparison.Ordinal规则     如果使用IndexOf(str,StringComparison.Ordinal)   则和Contain的内部调用完全一样   而且Contain还多一个  >= 0  判断
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-5-9 04:48

© 2014-2021

快速回复 返回顶部 返回列表