判断一个对象是否存在, 谁更快

判断一个对象是否存在(赋值)的三种办法如下:
if obj <> nil then ...
if Boolean(obj) then ...
if Assigned(obj) then ...

通过下面的测试, 结论是 obj <> nil 最慢; Boolean(obj) 与 Assigned(btn) 相当!

测试图:

测试源码:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

var
btn: TButton;
n: Cardinal;

procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
n := GetTickCount;
for i := 0 to 100000000 do if btn <> nil then ;
n := GetTickCount - n;
Text := IntToStr(n);

n := GetTickCount;
for i := 0 to 100000000 do if Boolean(btn) then ;
n := GetTickCount - n;
Text := Text + ‘ - ‘ + IntToStr(n);

n := GetTickCount;
for i := 0 to 100000000 do if Assigned(btn) then ;
n := GetTickCount - n;
Text := Text + ‘ - ‘ + IntToStr(n);
end;
end.

原文地址:https://www.cnblogs.com/blogpro/p/11456909.html

时间: 2024-11-06 14:41:32

判断一个对象是否存在, 谁更快的相关文章

判断一个对象是否存在, 谁更快?if Boolean(obj) then

判断一个对象是否存在, 谁更快?if Boolean(obj) then http://www.cnblogs.com/del/archive/2008/03/12/1101470.html

新型序列化类库MessagePack,比JSON更快、更小的格式

MessagePack is an efficient binary serialization format. It lets you exchange data among multiple languages like JSON. But it's faster and smaller. Small integers are encoded into a single byte, and typical short strings require only one extra byte i

Python多线程和多进程谁更快?

python多进程和多线程谁更快 python3.6 threading和multiprocessing 四核+三星250G-850-SSD 自从用多进程和多线程进行编程,一致没搞懂到底谁更快.网上很多都说python多进程更快,因为GIL(全局解释器锁).但是我在写代码的时候,测试时间却是多线程更快,所以这到底是怎么回事?最近再做分词工作,原来的代码速度太慢,想提速,所以来探求一下有效方法(文末有代码和效果图) 这里先来一张程序的结果图,说明线程和进程谁更快 一些定义 并行是指两个或者多个事件

Optipng,jpegoptim应用,用python实现图片压缩,让你的网站变得更快

compress images according to google suggestion. 1.环境:ubuntu12.04 . python 2.7.3 2.工具:optipng .jpegoptim. 3.安装工具:a.    sudo apt-get install optipng b.    sudo apt-get install jpegoptim 4. a. 使用方法: optipng    /filepath/filename.png. 一个例子: optipng  /hom

听说,你想让自己的Go程序运行的更快?

到现在为止,我已经忘记了我在写什么,但我确定这篇文章是关于Go语言的.这主要是一篇,关于运行速度,而不是开发速度的文章--这两种速度是有区别的. 我曾经和很多聪明的人一起工作.我们很多人都对性能问题很痴迷,我们之前所做的是尝试逼近能够预期的(性能)的极限.应用引擎有一些非常严格的性能要求,所以我们才会做出改变.自从使用了Go语言之后,我们已经学习到了很多提升性能以及让Go在系统编程中正常运转的方法. Go的简单和原生并发使其成为一门非常有吸引力的后端开发语言,但更大的问题是它如何应对延迟敏感的应

QList介绍(QList比QVector更快,这是由它们在内存中的存储方式决定的。QStringList是在QList的基础上针对字符串提供额外的函数。at()操作比操作符[]更快,因为它不需要深度复制)非常实用

FROM:http://apps.hi.baidu.com/share/detail/33517814 今天做项目时,需要用到QList来存储一组点.为此,我对QList类的说明进行了如下翻译. QList是一种表示链表的模板类.QList<T>是Qt的一种泛型容器类.它以链表方式存储一组值,并能对这组数据进行快速索引,还提供了快速插入和删除等操作.QList.QLinkedList和QVector提供的操作极其相似:* 对大多数操作来说,我们用QList就可以了.其API是基于索引(inde

让Python跑得更快

点击关注 异步图书,置顶公众号 每天与你分享 IT好书 技术干货 职场知识 Tips 参与文末话题讨论,即有机会获得异步图书一本. Python很容易学.你之所以阅读本文可能是因为你的代码现在能够正确运行,而你希望它能跑得更快.你可以很轻松地修改代码,反复地实现你的想法,你对这一点很满意.但能够轻松实现和代码跑得够快之间的取舍却是一个世人皆知且令人惋惜的现象.而这个问题其实是可以解决的. 有些人想要让顺序执行的过程跑得更快.有些人需要利用多核架构.集群,或者图形处理单元的优势来解决他们的问题.有

对于我来说,如何更快地A掉题目

对于我来说,如何更快地骗分A掉题目 这是关于一个蒟蒻的经验,请各位多多指教! 1.说明 大部分题目都有说明.这里以小X分砖块为例.在提示(说明)中可以看见这样的说明: 对于 30%的数据,N=1. 对于 60%的数据,所有 Ki均相等. 对于 100%的数据, 1≤N≤100000, 1≤Ki≤1000000000, 砖的总块数不超过 1000000000. 然后,我惊讶地发现:我不会写这道题.于是,说明就有用了! 对于 30%的数据,N=1.在N=1的情况下,说明只有一段,那么就特判输出砖块总

【Java并发工具类】StampedLock:比读写锁更快的锁

前言 ReadWriteLock适用于读多写少的场景,允许多个线程同时读取共享变量.但在读多写少的场景中,还有更快的技术方案.在Java 1.8中, 提供了StampedLock锁,它的性能就比读写锁还要好.下面我们介绍StampedLock的使用方法.内部工作原理以及在使用过程中需要注意的事项. StampedLock支持的三种锁模式 ReadWriteLock支持两种访问模式:读锁和写锁,而StampedLock支持三种访问模式:写锁.悲观读锁和乐观读. 其中写锁和悲观读锁的语义与ReadW