{
zw.delphi不同版本程序运行速度测试 delphi无论是开发,编译,还是运行,速度方面向来不差,笔者很少进行这种微粒度的优化,调试、
最近,因为项目需要,发现:同一个函数模块,差不多同样的代码,升级后,比2007慢2-3倍
涉及字符串、thashedlist,起初,感觉是uncode字符串函数,替换qstring函数的问题。
测试后,发现:
在短字符串方面,thashedstringlist,甚至字符串退换方面,xe10优化的更好,比d2007速度快20-50%,
真正的瓶颈,出现在xe10对于长字符串(>500k)的处理上,特别是lowercase等函数,xe10版本比d2007慢3倍。
---------------------------------------------- 为公平起见,特意采用纯pascal编写相关的测试函数。
理论上,适用于d7和其他版本的delphi,已在d2007,xe10测试通过
测试环境:win7+64位,笔记本:i7-3720QM,8G内存 测试结果如下:
tst001,@d2007,tn,6708 ms,@xe.10,tn,3962 ms,重点测试thashedstringlist,xe10比d2007快了一倍
tst002,@d2007,tn,4227 ms,@xe.10,tn,2231 ms,测试短字符串替换(<500)
tst003,@d2007,tn,6100 ms,@xe.10,tn,4290 ms,测试长字符串替换(>500k) tst004,测试其他字符串函数,长字符串(>500k) lowercase,@d2007,tn,296 ms,@xe.10,tn,1092 ms,!!!瓶颈
leftStr,@d2007,tn,281 ms,@xe.10,tn,390 ms
rightStr,@d2007,tn,281 ms,@xe.10,tn,390 ms
pos,@d2007,tn,156 ms,@xe.10,tn,203 ms } //---------测试代码 function tst_Str1():string;
var i,j,k1,t0,t2,tn:integer;
s2,kss,dss,ess,vss:string;
xlib:thashedstringlist;
begin //重点测试thashedstringlist
xlib:=thashedstringlist.create;
with mwin do begin msg.lines.add('');t0:=gettickcount;
for i:=0 to 5000 do begin kss:='xk'+intToStr(i+10000);
dss:='dx'+intToStr(i+10000);
xlib.Values[kss]:=dss;
end;
t2:=gettickcount;
//---tst
for i:=1 to 10 do
for j:=1 to 1000 do begin
kss:='xk'+intToStr(j+10000);
s2:=xlib.Values[kss];s2:=dss+s2;
end;
t2:=gettickcount;tn:=t2-t0;
s2:='tst001,tn,'+intToStr(tn)+' ms';msg.lines.add(s2);
end;
xlib.free;
end; function tst_Str2():string;
var i,j,k1,t0,t2,tn:integer;
s2,dss,ess,vss:string;
begin //测试短字符串替换(<500)
with mwin do begin msg.lines.add('');t0:=gettickcount;
vss:='abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
for i:=1 to 500 do
for j:=1 to 5000 do begin
dss:=StringReplace(vss,'efg','123',[rfReplaceAll,rfIgnoreCase]);
end;
t2:=gettickcount;tn:=t2-t0;s2:='tst002,tn,'+intToStr(tn)+' ms';msg.lines.add(s2);
end;
end; function tst_Str3():string;
var i,j,k1,t0,t2,tn:integer;
s2,dss,ess,vss:string;
begin //测试长字符串替换(>500k)
with mwin do begin msg.lines.add('');
s2:='abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
for i:=1 to 3000 do vss:=vss+','+s2;
t0:=gettickcount;
for i:=1 to 2 do
for j:=1 to 5 do begin
dss:=StringReplace(vss,'efg','123',[rfReplaceAll,rfIgnoreCase]);
end;
t2:=gettickcount;tn:=t2-t0;s2:='tst003,tn,'+intToStr(tn)+' ms';msg.lines.add(s2);
end;
end; function tst_Str4():string;
var i,j,k1,t0,t2,tn:integer;
s2,dss,ess,vss:string;
begin //测试长字符串函数(>500k)
with mwin do begin msg.lines.add('');
s2:='abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
for i:=1 to 3000 do vss:=vss+','+s2;
vss:=' '+vss+' ';
//--
t0:=gettickcount;for i:=1 to 10 do for j:=1 to 500 do dss:=lowercase(vss);
t2:=gettickcount;tn:=t2-t0;s2:='tst004,lowercase,tn,'+intToStr(tn)+' ms';msg.lines.add(s2);
//---
t0:=gettickcount;for i:=1 to 2000 do for j:=1 to 5000 do s2:=leftStr(vss,100);
t2:=gettickcount;tn:=t2-t0;s2:='tst004,leftStr,tn,'+intToStr(tn)+' ms';msg.lines.add(s2);
//--
t0:=gettickcount;for i:=1 to 2000 do for j:=1 to 5000 do s2:=rightStr(vss,100);
t2:=gettickcount;tn:=t2-t0;s2:='tst004,rightStr,tn,'+intToStr(tn)+' ms';msg.lines.add(s2);
//--
t0:=gettickcount;for i:=1 to 5000 do for j:=1 to 5000 do k1:=Pos('efg',vss);
t2:=gettickcount;tn:=t2-t0;s2:='tst004,pos,tn,'+intToStr(tn)+' ms';msg.lines.add(s2);
end;
end;

  

zw.delphi不同版本程序运行速度测试的更多相关文章

  1. 咏南中间件支持DELPHI低版本开发的两层程序平稳升级到三层

    提供DELPHI中间件及中间件集群,有意请联系. N年前,我们用DELPHI低版本开发的两层程序(比如工厂ERP系统),现在仍然在企业广泛地得到使用,但老系统有些跟不上企业的发展需要了.主要表现在:虽 ...

  2. delphi 各版本的特性

    delphi 各新版本特性收集 Delphi XE6新增了一些特性并增强了原有的功能,主要有以下几个方面:   IDE(整合开发环境)   Internet XML(扩展标记语言) Compiler( ...

  3. Delphi开发安卓程序的感受

    Delphi XE7开发安卓程序,界面开发速度非常快,这是eclipse无法比的,还有就是界面自适应能力很棒,我在不同版本和尺寸的设备中测试,运行良好,这些设备包括:三星I9100(安卓2.3:不到5 ...

  4. 如何使用VC++6.0发布程序(即release版本程序)

    大家都知道VC编译器默认生成debug版本的程序,但是debug版本程序无法运行在没有安装VC的电脑上, 这就要就我们生成release版本的程序,因为release版本在未安装VC的电脑上也能运行( ...

  5. VS2012及以上版本 程序打包部署详解

    引用:  http://blog.csdn.net/zhang_xinxiu/article/details/9099757 程序编写测试完成后接下来我们要做的是打包部署程序,但VS2012让人心痛的 ...

  6. WeTest+微信:小程序云端测试系统上线

    日前,微信新增小程序测试系统,可便于开发者检测小程序缺陷,评估小程序产品质量.在小程序发布之前,开发者可将小程序代码提交到测试系统,在不同型号的手机真机上运行,执行完毕后自动生成测试报告.小程序云端测 ...

  7. 将 Net 项目升级 Core项目经验:(三)迁移后的Net Standard版本的类库测试和多平台项目实测

    迁移后的Net Standard版本的类库测试和多平台项目实测 按照第一步的方法,添加一个Net Core的MSTest项目,然后将原来的测试项目下的代码迁移到新测试 项目中,然后引用新的Beyond ...

  8. Delphi中取得程序版本号

    Delphi做的程序,如果想包含版本信息, 必须在Delphi的集成编辑环境的菜单“Project/Options/Version Info”里面添加版本信息.即在Version Info 选项卡中选 ...

  9. Windows系统上release版本程序bug跟踪解决方案-.dmp文件。

    使用场景: Win32程序在release模式下编译完成,发送给最终用户使用时,我们的程序有时候也会出现崩溃的情况,这个时候如果能快速定位崩溃原因或提供一些程序崩溃时的状态信息,对我们解决问题将会带来 ...

随机推荐

  1. php 执行程序分析

    记录程序运行细节 记录程序运行时间 <?php $start = microtime(true); //index.php $end = microtime(true); $time = num ...

  2. 如何记录搜索引擎爬行记录php版

    写博客也有一段时间了,为什么搜索引擎迟迟不收录你的页面呢?想知道每天都有哪些蜘蛛“拜访”你的网站吗?作为一名网站长,有必要知道每天都有哪些蜘蛛爬行过你的网站,以便于了解各搜索引擎蜘蛛爬行频率,对网站进 ...

  3. 建设移动端web开发会涉及到的meta标签

    <meta name="format-detection" content="telephone=no"> <meta name=" ...

  4. ThinkPHP 错误: Undefined class constant 'MYSQL_ATTR_INIT_COMMAND'

    在配置了ThinkPHP 的数据库配置信息后,在实例化Model(),调用相关方法时候 出现错误,改进如下方式后解决: 找到php.ini 的文件,打开扩展  php_pdo_mysql.dll ,然 ...

  5. Django入门2

    Django模板简单实例 上篇中将html写在了views中,这种混合方式(指Template和views混在一起)不适合大型开发,而且代码不易管理和维护,下面就用Django自带的模板来学习(显示一 ...

  6. mvc 学习(一)

    1.a标签里三元运算符的写法 : <a href="/Travel/TravelAbroadList/@ViewData["searchname"]_0_@View ...

  7. MyBatis学习总结(一)——MyBatis快速入门(转载)

    本文转载自http://www.cnblogs.com/jpf-java/p/6013537.html MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了 ...

  8. vsftp 搭建及虚拟账号配置

    安装vsftpd yum -y install vsftpd chkconfig vsftpd on 修改主配置文件 vi /etc/vsftpd/vsftpd.conf # 允许匿名用户登陆,登陆时 ...

  9. [翻译]类型双关不好玩:C中使用指针重新解释是坏的

    原文地址 Type punning isn't funny: Using pointers to recast in C is bad. C语言中一个重新解释(reinterpret)数据类型的技巧有 ...

  10. PL/SQL %TYPE和%ROWTYPE的区别【转】

    %TYPE: 定义一个变量,其数据类型与已经定义的某个 数据变量的类型相同,或者与数据库表的某个列的数据类型 相同,这时可以使用%TYPE.         使用%TYPE 特性的优点在于: 1.所引 ...