`
cppmule
  • 浏览: 449397 次
  • 性别: 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要多耗一点时间吧。。

相关推荐

    C/C++ 字符串拼接 字符串 数组

    C/C++ 字符串拼接 字符串 数组

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

    C/C++是两种广泛使用的编程语言,特别是在系统级编程、游戏开发和高性能计算等领域。C++是C语言的扩展,引入了面向对象编程的概念。在编程过程中,理解并有效地使用库函数是至关重要的,因为它们提供了标准功能,...

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

    C/C++复制字符串到剪粘板中 C/C++复制字符串到剪粘板中是指将字符串复制到剪粘板中,以便在其他应用程序中使用。这可以通过Win32 API和MFC来实现。 在Win32 API中,可以使用OpenClipboard、GetClipboardData、...

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

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

    c/c++与java互通 AES加密解密

    本话题主要探讨如何在C/C++和Java之间使用基本的字符串和数组操作实现AES加密解密,而不依赖任何额外的加密库。 首先,我们来了解AES加密的基本原理。AES基于块密码,每个数据块为128位,支持128、192和256位的密钥...

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

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

    使用C++实现的字符串拼接函数的实现及讨论详解.docx

    c 字符串拼接C/C++中针对字符串函数的使用过程中,需要格外注意字符串终止符'\0'。字符串结尾处默认带'\0'。 带形参n的库函数可以有效防止因字符串长度过长导致的段错误,建议使用带n的字符串函数。 一 、snprint数...

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

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

    C/C++ API 帮助文档大全(中文,chm格式)

    C/C++ API 帮助文档大全是一份全面的资源,包含了C和C++编程语言的各类API接口和函数的详细信息。这份文档通常以CHM(Compiled Help Manual)格式存在,这是一种由微软开发的、用于存储HTML帮助文档的压缩格式。通过...

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

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

    使用C++实现的字符串拼接函数的实现及讨论.docx

    c 字符串拼接C/C++中针对字符串函数的使用过程中,需要格外注意字符串终止符'\0'。字符串结尾处默认带'\0'。 带形参n的库函数可以有效防止因字符串长度过长导致的段错误,建议使用带n的字符串函数。一 、snprint数的...

    c/c++调用java方法

    对于JDK,可以从SUN公司(现已被Oracle收购)的官方网站下载最新版本,按照默认设置安装,假设安装路径为C:\j2sdk1.4.2_15。在Visual C++中,我们需要在Tools -&gt; Options的Directories标签页下,添加JDK的Include和...

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

    根据提供的信息,我们可以详细探讨几个重要的C语言字符串处理函数,这些函数是进行字符串操作的基础工具。下面我们将逐一介绍这些函数的功能、用法以及提供具体的示例代码。 ### 1. stpcpy #### 功能 `stpcpy` 函数...

    C/C++中文帮助文档

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

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

    例如,`%6.9s`表示显示长度不小于6且不大于9的字符串,如果超过9,则第9个字符之后的内容会被截断。 此外,`l`(小写L)可以用来指定长整型(`long`)或双精度浮点型(`double`),如`%ld`和`%lf`。 对齐方式可以...

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

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

    基于C/C++及java开发的物联网智能婴儿床+源码+文档(毕业设计&课程设计&项目开发)

    基于C/C++及java开发的物联网智能婴儿床+源码+文档,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于C/C++及java开发的物联网智能婴儿床+源码+文档,适合毕业...

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

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

    C/C++ 字符串转化成数字,支持任意进制

    在C/C++编程中,将字符串转化成数字是一项常见的任务,尤其在处理用户输入或解析数据时。这个程序可能涉及到将表示任意进制的字符串转换为对应的整数值。以下是关于这个话题的一些详细知识点: 1. **字符串与数字的...

Global site tag (gtag.js) - Google Analytics