文档章节

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

涂孟超
 涂孟超
发布于 2014/09/26 15:37
字数 175
阅读 8
收藏 0
判断一个对象是否存在(赋值)的三种办法如下:
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.

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2008/03/12/1101470.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
C# GetHashCode、Equals函数和键值对集合的关系

C# GetHashCode、Equals函数和键值对集合的关系 说明 HashCode:Hash码。 特性:两个值,相同的的值生成的Hash肯定相同,但是不同的值生成的Hash很大程序上会不同。 作用:求Hash值效率比引用...

GetPower
昨天
0
0
JS中最简单且最强大的数组去重

数组去重的机制中必须要有2次循环,但,这并不意味着必须要有若干for循环的显性代码,通过数组的自身的方法,可以大大简化代码;下面就是我写的最简单且最强大的数组去重方法: 目录 一、最简...

科研者
03/20
0
0
php性能优化:使用 isset()判断字符串长度速度比strlen()更快

php中如何判断字符串的长度?很多人第一想到的应该就是 strlen() mb_strlen() 这些函数了。但是从程序性能上来讲,这两个函数在判断字符串长度的过程中都不是最佳的,虽然他们是专业级的检测...

微信迷
2014/02/27
0
0
如何判断Javascript对象是否存在

举例来说,请考虑以下情况。 现在,我们要判断一个全局对象myObj是否存在,如果不存在,就对它进行声明。用自然语言描述的算法如下:   if (myObj不存在){     声明myObj;   } 你可能...

董广明
2014/02/25
0
2
如何判断Javascript对象是否存在

Javascript语言的设计不够严谨,很多地方一不小心就会出错。 举例来说,请考虑以下情况。 现在,我们要判断一个全局对象myObj是否存在,如果不存在,就对它进行声明。用自然语言描述的算法如...

阮一峰
2011/05/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

解读|TARS开源项目发布Go语言版本

导语:近日,Tars 开源项目在上海发布并开源了 Go 语言版本,其性能与 C++ 版本相当,比 gRPC 的性能高 5 倍。 ——编者 Tars 是腾讯开源的一款微服务框架,它于去年 4 月份开源,并于今年 ...

腾讯开源
15分钟前
0
0
redis-list

列表用来存储多个有序的字符串,列表中元素是可以重复的,最多可以存储2^32-1个元素 常用命令: lrange key start end 获取指定范围内的元素列表,索引从0开始 0,-1取出所有的元素 lindex k...

拐美人
32分钟前
0
0
AOSP Build System —— Soong

Soong Soong is the replacement for the old Android make-based build system. It replaces Android.mk files with Android.bp files, which are JSON-like simple declarative descriptio......

雪落青山
49分钟前
1
0
Unity C# lock关键字的坑

Unity 5.6 环境下的 lock关键字,在特定的多线程环境下会死锁 崩溃 其中一种情况: 异步socket 操作,由于内部是一个线程池回调的异步回调,操作同一个对象时 lock关键字会概率出现死锁 闪退...

梦想游戏人
今天
1
0
简单的svm例子

数据来源:https://github.com/oumiga1314/Coursera-ML-AndrewNg-Notes/blob/master/code/ex6-SVM/data/ex6data1.mat import pandas as pd import numpy as np import scipy.io as sio impor......

南桥北木
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部