Delphi XE4中Or, In, CharInSet,哪个更快?
来源:互联网 发布:医药研发待遇知乎 编辑:程序博客网 时间:2024/05/05 17:47
在Delphi XE4中测试用Or,In,CharInSet三种方式,实现判断一个字符是否在一个字符数组中。
作者提供了代码:
procedure
TForm7.FormCreate(Sender: TObject);const
Max = 200000000;var
S : AnsiString; PBuffer : PByte; Count : Integer; I : Integer; pf : int64; st : int64; et : int64;begin
WinApi.Windows.QueryPerformanceFrequency( pf );//获得机器内部定时器的时钟频率 SetLength( S, Max ); for
I := 1 to
Max do
S[i] := AnsiChar( random(128-32) 31 ); WinApi.Windows.QueryPerformanceCounter( st );//取得开始值 Count := 0; PBuffer := @S[1]; while
PAnsiChar(PBuffer)^<>#0 do
begin
if
(PAnsiChar(PBuffer)^='M'
) or
(PAnsiChar(PBuffer)^='Z'
) or
(PAnsiChar(PBuffer)^='x'
) or
(PAnsiChar(PBuffer)^='y'
) or
(PAnsiChar(PBuffer)^='*'
) then
Inc(Count); Inc( PBuffer ); end
; WinApi.Windows.QueryPerformanceCounter( et );//取得结束值 Caption := Format('%s, or:%d-%f'
,[Caption,Count, (et-st) / pf]);//计算出耗用的时长单位为秒 WinApi.Windows.QueryPerformanceCounter( st ); Count := 0; PBuffer := @S[1]; while
PAnsiChar(PBuffer)^<>#0 do
begin
if
PAnsiChar(PBuffer)^ in
['M'
,'Z'
,'x'
,'y'
,'*'
] then
Inc(Count); Inc( PBuffer ); end
; WinApi.Windows.QueryPerformanceCounter( et ); Caption := Format('%s, in:%d-%f'
,[Caption,Count, (et-st) / pf]); WinApi.Windows.QueryPerformanceCounter( st ); Count := 0; PBuffer := @S[1]; while
PAnsiChar(PBuffer)^<>#0 do
begin
if
CharInSet( PAnsiChar(PBuffer)^, ['M'
,'Z'
,'x'
,'y'
,'*'
] ) then
Inc(Count); Inc( PBuffer ); end
; WinApi.Windows.QueryPerformanceCounter( et ); Caption := Format('%s, fn:%d-%f'
,[Caption,Count, (et-st) / pf]);end
;
得出的结论是用IN的方式最快,其次是OR,最愉的是用函数CharInSet。
看后我也用这个代码试了一下,情况与上面不同:
在Debug状态下:
在Release状态下:
在两种状态下,结果是不一样的,此外,在Release状态下,与原作者也有些偏差。你也一起来试试,看看是什么样的结果?
0 0
- Delphi XE4中Or, In, CharInSet,哪个更快?
- MySQL Internals——IN,OR,BETWEEN哪个更快?
- PHP中sha1_file与md5_file哪个更快?
- java中int与short哪个速度更快?
- Java和C语言哪个更快?
- TOPN和SETROWCOUNTN哪个更快
- 存储过程与Insert哪个更快
- ASP.NET vs. PHP,哪个更快?
- 串行, 并行,速度哪个更快。
- 复制和剪切, 哪个速度更快?
- JAVA获取时间戳,哪个更快
- C和C++哪个更快?
- NSSArray和NSSet遍历哪个更快
- JAVA获取时间戳,哪个更快
- JAVA获取时间戳,哪个更快
- JAVA获取时间戳,哪个更快
- JAVA获取时间戳,哪个更快
- JAVA获取时间戳,哪个更快
- 黑马程序员--javaSE--网络编程基础总结
- to_char() 多了个字符
- Linux中fork()函数创建子线程的理解
- STS(Spring Tool Suite)使用小技巧记录
- 各种变换滤波和噪声的类型和用途总结
- Delphi XE4中Or, In, CharInSet,哪个更快?
- test
- <%@ include file=""%>与<jsp:include page=""/>区别
- 拓胜第十六天
- 用 ACE Framework 实现进程间通信
- java 下载Excel动态模板文件压缩包
- rails 数据变化的监控
- vim 使用实用技巧
- 【clear】闭合浮动(clear)的原理和应用