zoukankan      html  css  js  c++  java
  • C\C++\Java字符串拼接比较

    C\C++\Java字符串拼接比较:

    昨天买好小米盒子,自己折腾了一会然后就教会老妈怎么玩,怎么看还珠格格之后,我闲来无事,突然想起了上次一个项目处理字符串遇到的性能问题,然后就仔细考虑了一下,越考虑发现需要注意的越多,于是开了ubuntu虚拟机测试一下(我的host机器是i7 Q740 四核八线程):
    C语言版本是直接用strncpy,纯内存字节流操作
    C++第一个版本用到了std::string,用append添加字符传
    C++第二个版本用到了std::stringstream,直接ss<<"hello"
    Java用StringBuilder

    结果是:
    C语言运行效率奇高无比,2-3秒
    C++std::string,速度9秒,如果注释掉sb.reserve(10000)那么就是11秒
    C++std::stringstream,19秒
    Java的StringBuilder,也是11秒

    曾经测试过其他方法,都是超过30秒而被我取消了:
    vector<char>,第二个循环里push_back('h');五次
    C语言string.h的strcat和strncat

    总结:
    本来以为Java速度和C++不是一个数量级的,现在看来,貌似Java速度也非常高,反而是C和C++如果代码写的考虑不周到,那么速度会急剧下降的


    int main()
    {
        int i,j;
        int num = 1000000;
        time_t t1;
        time(&t1);
        for ( i = 0; i < num; i++) {
            char a[10000]="";
            for( j=0; j<300; j++) {
                int len = strlen("hello");
                strncpy(a+j*5,"hello",len);
            }
        }
        time_t t2;
        time(&t2);
        printf("%d  %d\n",t1,t2);
        printf("%d\n",t2-t1);
    }
    
    int main()
    {
        int num = 1000000;
        time_t t1;
        time(&t1);
        for (int i = 0; i < num; i++) {
            std::string sb;
            sb.reserve(10000);//这行代码如果注释掉,那么运行时间是11秒
            for(int j=0; j<300; j++) {
                sb.append("hello");
            }
        }
        time_t t2;
        time(&t2);
        std::cout<< t1 <<"  " <<t2 <<"\n";
        std::cout<< t2-t1<<"\n";
    }
    
    int main()
    {
        int num = 1000000;
        time_t t1;
        time(&t1);
        for (int i = 0; i < num; i++) {
            std::stringstream ss;
            for(int j=0; j<300; j++) {
                ss<<"hello";
    
            }
        }
        time_t t2;
        time(&t2);
        std::cout<< t1 <<"  " <<t2 <<"\n";
        std::cout<< t2-t1<<"\n";
    }
    public static void main(String[] args) throws Exception {
    	long t1 = System.currentTimeMillis();
    	int num = 1000000;
    	for (int i = 0; i < num; i++) {
    		StringBuilder sb = new StringBuilder();
    		for (int j = 0; j < 300; j++) {
    			 sb.append("hello");
    		}
    	}
    	long t2 = System.currentTimeMillis();
    	System.out.println(t2 - t1);
    }


  • 相关阅读:
    115. Distinct Subsequences
    Kafka介绍-copy
    Flume的简单介绍-copy
    storm简介、原理、概念-copy
    日志管理ELK-copy
    安装Nginx+Lua+OpenResty
    Nginx(四)------nginx 负载均衡-copy
    Nginx(一)------简介与安装-copy
    Nginx(二)nginx.conf 配置文件-copy
    Nginx(三)nginx 反向代理-copy
  • 原文地址:https://www.cnblogs.com/xinyuyuanm/p/3019628.html
Copyright © 2011-2022 走看看