`
cppmule
  • 浏览: 437721 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

C/C++&Java 字符串拼接效率对比(下部)[内容超过长度被截断完成可以下载文档和源码]

阅读更多

C/C++字符串拼接测试运行结果:

 

Release version.

TEST_TIME: 90000

C language memcpy append Used: 0 ms.

string length: 630000

std::string += operator Used: 15 ms.

string length: 630000

std::string append Used: 16 ms.

string length: 630000

std::ostringstream << Used: 16 ms.

string length: 630000

capacity: 630015

size: 0

hava resize(PREALLOCATE_SIZE) std::string += operator Used: 0 ms.

string length: 630000

MFC CString append Used: 63 ms.

string length: 630000

MFC CString operator append Used: 62 ms.

string length: 630000

c string function strcat: Used: 32203 ms.

string length: 630000

---------Statistics informations(sorting ascendent)-------

 

sort order: 1

item: C language memcpy append

used: 0 ms.

 

sort order: 2

item: hava resize(PREALLOCATE_SIZE) std::string += operator

used: 0 ms.

 

sort order: 3

item: std::string += operator

used: 15 ms.

 

sort order: 4

item: std::string append

used: 16 ms.

 

sort order: 5

item: std::ostringstream <<

used: 16 ms.

 

sort order: 6

item: MFC CString operator append

used: 62 ms.

 

sort order: 7

item: MFC CString append

used: 63 ms.

 

sort order: 8

item: c string function strcat:

used: 32203 ms.

 

----------------------------------------------------------

Press any key to continue . . .

Java的测试代码段:

void testJavaStringPerformance() {

final int TEST_TIMES = 90000;

       //String

       String str = new String();

 

       System.out.println("The testing is running, please wait...");

       long start = System.currentTimeMillis();       

       for (int i=0; i<TEST_TIMES; i++) {

              str += "cppmule";

       }

       long strUsed = System.currentTimeMillis() - start;

       System.out.println("strUsed: " + strUsed + " ms.");

      

//StringBuffer

       start = 0;

       StringBuffer strBuffer = new StringBuffer();

       start = System.currentTimeMillis();

       for (int i=0; i<TEST_TIMES; i++) {

              strBuffer.append("cppmule");

       }

       long strBufferUsed = System.currentTimeMillis() - start;

       System.out.println("StringBuffer append: " + strBufferUsed + " ms.");

      

       //StringBuilder

       start = 0;

       StringBuilder strBuilder = new StringBuilder();

       start = System.currentTimeMillis();

       for (int i=0; i<TEST_TIMES; i++) {

              strBuilder.append("cppmule");

       }

       long strBuilderUsed = System.currentTimeMillis() - start;

       System.out.println("StringBuilder append: " + strBuilderUsed + " ms.");

       System.out.println("Times: " + TEST_TIMES);

}

Java字符串拼接运行结果:

 

The testing is running, please wait...

strUsed: 443141 ms.

StringBuffer append: 15 ms.

StringBuilder append: 31 ms.

Times: 90000

 

Author:

By: cppmule

Email: cppmule@gmail.com

 

 

 

 

分享到:
评论
16 楼 xjlfu 2011-02-01  
看过StringBuilder的代码就知道,StringBuilder就是apache的FastStringBuffer
15 楼 sam0411 2011-01-30  
StringBuffer and StringBuilder 的测试结果真是严重颠覆我的认知了,等我运行一下的。
14 楼 feiyan35488 2011-01-26  
willpower88 写道
willpower88 写道
jdk5.0后的版本会把new StringBuffer("afdsd").append("def");转为 "afdsd" + "def"的


不过可能和 我的反编译软件有关,我用的是cavaj

java 字符串拼接中
+ 号最慢,当数据量到 W级别时,时间是 +s
buffer  其次 ----------------        +10ms
builder 最快了 这是进程安全的。      +ms

对lz 的例子 保持强烈的怀疑。

to ls: 反编译是不精确的,建议看源代码
13 楼 willpower88 2011-01-26  
willpower88 写道
jdk5.0后的版本会把new StringBuffer("afdsd").append("def");转为 "afdsd" + "def"的


不过可能和 我的反编译软件有关,我用的是cavaj
12 楼 willpower88 2011-01-26  
jdk5.0后的版本会把new StringBuffer("afdsd").append("def");转为 "afdsd" + "def"的
11 楼 czwlucky 2011-01-25  
F:\Java2>java -version
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode, sharing)

F:\Java2>java TestString
The testing is running, please wait...
strUsed: 383672 ms.
StringBuffer append: 15 ms.
StringBuilder append: 0 ms.
Times: 90000

F:\Java2>java -server TestString
The testing is running, please wait...
strUsed: 290110 ms.
StringBuffer append: 15 ms.
StringBuilder append: 0 ms.
Times: 90000
10 楼 lxs647 2011-01-24  
build and buffer

的结果很怀疑、、、
9 楼 aninfeel 2011-01-21  
偶测过,stringbuffer不可能有stringbuilder快的,在7次拼装一下+都比stringbuffer快。
8 楼 skzr.org 2011-01-21  
ansjsun 写道
我记得+也挺快的么..估计写道for循环里..jdk不做优化了..

“记得”就是感觉吧

打开class文件看看+的实现就知道他们之间的区别了!

区别:1 对象创建个数 2 线程安全
7 楼 ansjsun 2011-01-21  
我记得+也挺快的么..估计写道for循环里..jdk不做优化了..
6 楼 ansjsun 2011-01-21  
我对你测试结果标识怀疑.你等等 啊
5 楼 ansjsun 2011-01-21  
你直接用加号 +++++ 都比StringBuffer 快 stringbuffer是线程安全的吧
4 楼 wesker0918 2011-01-20  
The testing is running, please wait...
strUsed: 57125 ms.
StringBuffer append: 16 ms.
StringBuilder append: 0 ms.
Times: 90000
3 楼 skzr.org 2011-01-11  
StringBuffer append: 48 ms.
StringBuilder append: 14 ms.
Times: 90000
2 楼 mercyblitz 2011-01-11  
这个好像没有什么可比性。除掉调式信息+server模式再试下!
1 楼 苍山洱海 2011-01-10  
StringBuffer  竟然比 StringBuilder快一倍。这是怎么个情况?

StringBuffer可是线程安全的,虽然程序没用到多线程,但怎么也比StringBuilder要多耗一点时间吧。。

相关推荐

    二维码(QRcode)生成算法 C语言/C++源码

    #二维码(QRcode)生成算法 C语言/C++ 源码 1. 根据输入字符串识别编码模式; 2. 根据输入字符串长度选择合适的QRcode版本; 3. 将编码转换为二进制位流表示为数据码字; 4. 使用多项式生成纠错码; 5. 将数据码和...

    c/c++ 与java互通 AES加密解密,算法ECB

    工作原因c和java都得熟悉,因此把java端和c/c++实现都给大家了,注意java端要明确指明字符集为GBK,因为各版本jdk默认字符集并不一致,key采用16位,你知道的。压缩包里有两个工程,一个vc6.0一个myeclipse,本帖是...

    c/c++复制字符串到剪粘板中

    c/c++复制字符串到剪粘板中

    Dev-cpp5.4.0及API帮助文档 2018年蓝桥杯C语言/c++

    Dev-cpp5.4.0及API帮助文档 2018年蓝桥杯C语言/c++ 需要的同学可以下载使用

    C/C++中文文档(支持C++20和C18)和蓝桥杯C/C++组用的文档

    这个文档压缩包包含普通C/C++中文文档和蓝桥杯比赛时用的文档,C/C++中文文档是最新版,支持到C++20和C18,且包含以前版本的内容。蓝桥杯蓝桥杯C/C++组用的文档比正常文档更简略,但包含了ASCII码表。

    c / c++ / cpp / stl 中文帮助文档手册chm格式下载

    c / c++ / cpp / stl 中文帮助文档手册chm格式下载 C/C++ 语言参考 基本C/C++ 预处理命令 操作符优先级 转义字符 ASCII码表 基本数据类型 关键字 标准 C 库: Standard C I/O Standard C String...

    ndk源码基于eclipse开发c/c++/java

    基于Eclipse开发NDK ,开发C ,C++ 和 Java的源码,可以查看Java调用c/c++, 和c/c++调用Java的内容

    c/c++中文帮助文档(API)

    c/c++中文帮助文档(API),包含c和c++所有的库函数

    C语言字符串函数大全C/C++基础 字符串操作大全

    C语言字符串函数大全C/C++基础 函数名: stpcpy 功 能: 拷贝一个字符串到另一个 用 法: char *stpcpy(char *destin, char *source); 程序例: #include &lt;stdio.h&gt; #include &lt;string.h&gt; int main(void) ...

    c/c++ 与java互通 AES加密解密,算法ECB/PKCS5PADDING

    工作原因c和java都得熟悉,因此把java端和c/c++实现都给大家了,注意java端要明确指明字符集为GBK,因为各版本jdk默认字符集并不一致,key采用16位,你知道的。压缩包里有两个工程,一个vc6.0一个myeclipse,都拿去...

    C/C++的split分隔字符串

    标准C/C++编写的字符串分隔函数,可以设置分隔字符串,解出字符串存到vector里面。有需要的可以下载

    C/C++实现字符串拆分

    C/C++实现字符串的拆分截取,输入一个字符串,并输入截取起始位置和截取长度,返回截取到的结果

    C语言/C++基础之爱心源码

    C语言/C++基础之爱心源码,适合初学C语言/C++的小伙伴学习研究,博客中有对应的讲解和演示,避免走弯路,费时费力。也真心希望能够帮助正在苦学C语言/C++ 程序设计的小伙伴们,你们的成长是我最大的幸福

    C/C++中文帮助文档

    C/C++参考手册是专为C语言开发者制作的一个学习文档,包含了基本的介绍、预处理命令、算法、正则表达式、转义字符、基本数据类型等介绍,可以方便开发者快速掌握C语言的开发技巧,让你轻松开发出满意的软件。

    C#调用C/C++DLL收取中文字符处理

     C/C++字符串一般通过char* 或wchar_t*来表示,char*表示的是ANSCII字符串, wchar_t*表示Unicode字符串,Unicode字符串在C/C++中一个字符占用两个字节,ANSII字符串一个字符占用一个字节(中文占用两个字节), ...

    c/c++字符串操作大全

    c/c++字符串操作大全,基本包含了对字符串的全部操作,简单实用。

    C/C++字符串,字符转数字,数字转字符

    在C/C++语言中没有专门的字符串变量,通常用字符数组来存放字符串。字符串是以“\0”作为结束符。

    使用C/C++实现字符串的反转

    使用C/C++实现字符串的反转,不能使用系统函数

    c/c++调用java方法

    详细请见文档说明c/c++调用java方法

    格C/C++语言式化字符串

    C/C++语言格式化字符串 %d 十进制有符号整数 %u 十进制无符号整数 %f 浮点数 %s 字符串 %c 单个字符 %p 指针的值 %e 指数形式的浮点数 %x, %X 无符号以十六进制表示的整数 %0 无符号以八进制表示的整数 %g...

Global site tag (gtag.js) - Google Analytics