Qt字符串和java字符串的split方法比较和python的解析比较
来源:互联网 发布:java变量命名规则 编辑:程序博客网 时间:2024/05/21 02:48
早起闲的没事,做了一个测试,有关Qt string 与java string 性能比较的测试,测试的数据源是RFC 3261的一个报文,把其按照"\r\n"进行解析。分别用了java的String.split方法和QString的split方法,当然这个测试可能比较片面,无法反应真实的2者性能差距,但测试结果也是很有意思
硬件平台 I5 2.3 GHz DDR3 1600MHz
Mac OS 10.7.2
java 1.6.0_33
Qt: 4.7.4
代码如下:
public class myClass
{
public static String recvMsg = "INVITE sip:bob@biloxi.com SIP/2.0\r\n" +
"Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bK776asdhds\r\n" +
"Max-Forwards: 70\r\n" +
"To: Bob <sip:bob@biloxi.com>\r\n" +
"From: Alice <sip:alice@atlanta.com>;tag=1928301774\r\n" +
"Call-ID: a84b4c76e66710@pc33.atlanta.com\r\n" +
"CSeq: 314159 INVITE\r\n" +
"Contact: <sip:alice@pc33.atlanta.com>\r\n" +
"Content-Type: application/sdp\r\n" +
"Content-Length: 142\r\n";
public static void main(String [] args)
{
System.out.println("main function called");
long startTime = System.currentTimeMillis();
for ( int i = 0 ; i < 10000 * 1000 ; i ++ )
{
String [] result = recvMsg.split("\r\n");
if ( result.length != 10 )
{
System.out.println("not 10 ");
break;
}
}
long endTime = System.currentTimeMillis();
System.out.println("alltime " + (endTime - startTime));
}
}
测试的几次结果如下:
1) 40795 ms
2) 34476 ms
3) 32886 ms
4) 41293 ms
#include <QtCore/QCoreApplication>
#include <QtCore/QTime>
#include <QtCore/QStringList>
#include <QtCore/QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QString recvMsg = "INVITE sip:bob@biloxi.com SIP/2.0\r\n"\
"Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bK776asdhds\r\n"\
"Max-Forwards: 70\r\n" \
"To: Bob <sip:bob@biloxi.com>\r\n" \
"From: Alice <sip:alice@atlanta.com>;tag=1928301774\r\n"\
"Call-ID: a84b4c76e66710@pc33.atlanta.com\r\n" \
"CSeq: 314159 INVITE\r\n" \
"Contact: <sip:alice@pc33.atlanta.com>\r\n" \
"Content-Type: application/sdp\r\n" \
"Content-Length: 142\r\n";
QTime startTime = QTime::currentTime();
for ( int i = 0 ; i < 1000*10000; i ++ )
{
const QStringList & result = recvMsg.split("\r\n"); //为了提高效率,采用引用
if ( result.size() != 11 ) //QString.split会有一个空白字符被解析出来,所以数组内多一个value
{
qDebug()<< "decode error"<<result.size();
break;
}
}
QTime endTime = QTime::currentTime();
qDebug()<<" all time "<< startTime.msecsTo(endTime);
return a.exec();
}
编译为release版本,测试结果如下:
1) 39132 ms
2) 41153 ms
3) 40572 ms
4) 39043 ms
直观上看,QString的性能比java String的性能要差
from PyQt4.QtCore import *
sipMsg = "INVITE sip:bob@biloxi.com SIP/2.0\r\n" \
"Via: SIP/2.0/UDP pc33.atlanta.com;branch=z9hG4bK776asdhds\r\n" \
"Max-Forwards: 70\r\n" \
"To: Bob <sip:bob@biloxi.com>\r\n" \
"From: Alice <sip:alice@atlanta.com>;tag=1928301774\r\n" \
"Call-ID: a84b4c76e66710@pc33.atlanta.com\r\n" \
"CSeq: 314159 INVITE\r\n" \
"Contact: <sip:alice@pc33.atlanta.com>\r\n" \
"Content-Type: application/sdp\r\n" \
"Content-Length: 142\r\n"
if __name__ == "__main__":
import sys
startTime = QTime.currentTime()
count = 1000*1000
while count > 0:
count = count - 1
result = sipMsg.split("\r\n")
if len(result) != 11:
print "error"
endTime = QTime.currentTime()
print startTime.msecsTo(endTime)
最后测试了一下python,速度很快阿
/usr/local/bin/python /t2/main.py
1730
- Qt字符串和java字符串的split方法比较和python的解析比较
- JAVA和C#字符串常用方法的比较
- JAVA字符串的反转和比较
- 容器的比较和字符串的比较
- StringTokenizer和split分隔字符串效率比较
- 字符串和整数的比较
- Python的字符串比较
- java java中subString、split、stringTokenizer三种截取字符串方法的性能比较
- java java中subString、split、stringTokenizer三种截取字符串方法的性能比较
- java java中subString、split、stringTokenizer三种截取字符串方法的性能比较
- java java中subString、split、stringTokenizer三种截取字符串方法的性能比较
- java java中subString、split、stringTokenizer三种截取字符串方法的性能比较
- Python字符串比较忽略大小写的方法
- Python字符串比较忽略大小写的方法
- Python字符串比较忽略大小写的方法
- python 字符串比较忽略大小写的方法
- QT中字符串的比较
- java中subString、split、stringTokenizer三种截取字符串方法的性能比较
- C++函数式编程(五)性能影响
- 给对话框添加状态栏
- 裸板开发--makefile 出错问题解决
- Eclipse快捷键大全(转载)
- access数据库中小数点前0没有了
- Qt字符串和java字符串的split方法比较和python的解析比较
- [程序猿感悟] 好的程序员应该掌握的几门编程语言
- shift_循环获取位置参数
- 网页适量绘图,VML+SVG双剑合璧 打造GIS客户端应用
- 最值得创业者聆听的10大TED演讲
- TCP/IP总结
- Android应用开发之(你必须知道的8个Android开发工具)
- UIP成功移植到CC2530上
- 简单的控制台五子棋游戏