[杂谈] 一个关于 as 的小测试
代码如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
procedure TForm1.Button1Click(Sender: TObject);
var
B:TButton;
I: Integer;
ATime:Cardinal;
begin
ATime:=GetTickCount;
for I := 0 to 99999999 do
B:=Sender as TButton;
ATime:=GetTickCount-ATime;
Memo1.Lines.Add('as time:'+IntToStr(ATime)+'ms');
ATime:=GetTickCount;
for I := 0 to 99999999 do
B:=TButton(Sender);
ATime:=GetTickCount-ATime;
Memo1.Lines.Add('direct time:'+IntToStr(ATime)+'ms');
end;
|
好吧,我们已经知道 ASender 肯定是一个 TButton 类型的对象,然后循环了 1 亿次,以便放大问题。我们看下输出结果:
as time:578ms
direct time:219ms
也就是说,用 as 转换花费的时间,要比直接强制转换多花了 2.7 倍的时间。根据统计结点来说,1 亿次需要 578 ms,每百万次也差距在 3.6 ms 左右,实际差距并没有比例看起来的那么吓人。不过在程序中,如果你明确知道类型的情况下,用强制转换好象没什么坏片,还少输入两个空格的工作量,看起来蛮划算的,不过由于()的位置,实际输入可能会更慢一些。好吧,处女座的人纠结去吧,我个人还是觉得强转更好一点点,蚊子再小也是肉。
[杂谈] 一个关于 as 的小测试的更多相关文章
- 一个简单的binlog恢复测试
日常的数据备份及恢复测试,是DBA工作重中之重的事情,所以要做好备份及测试,日常的备份常见有mysqldump+binlog备份.xtrabackup+binlog备份,无论那一种,几乎都少不了对bi ...
- 曲演杂坛--Update的小测试
今天偶然想起一个UPDATE相关的小问题,正常情况下,如果我们将UPDATE改写成与之对应的SELECT语句,其SELECT查询结果应与UPDATE的目标表存在一对一的关系,例如: 对于UPDATE语 ...
- Java学习笔记二十九:一个Java面向对象的小练习
一个Java面向对象的小练习 一:项目需求与解决思路: 学习了这么长时间的面向对象,我们只是对面向对象有了一个简单的认识,我们现在来做一个小练习,这个例子可以使大家更好的掌握面向对象的特性: 1.人类 ...
- 一个简单的Maven小案例
Maven是一个很好的软件项目管理工具,有了Maven我们不用再费劲的去官网上下载Jar包. Maven的官网地址:http://maven.apache.org/download.cgi 要建立一个 ...
- PHP中使用PDO操作事务的一些小测试
关于事务的问题,我们就不多解释了,以后在学习 MySQL 的相关内容时再深入的了解.今天我们主要是对 PDO 中操作事务的一些小测试,或许能发现一些比较好玩的内容. 在 MyISAM 上使用事务会怎么 ...
- Python 工匠:一个关于模块的小故事
前言 模块(Module)是我们用来组织 Python 代码的基本单位.很多功能强大的复杂站点,都由成百上千个独立模块共同组成. 虽然模块有着不可替代的用处,但它有时也会给我们带来麻烦.比如,当你接手 ...
- 分析一个类似于jquery的小框架
在网上下了一个类似于jQuery的小框架,分析源码,看看怎么写框架. 选择器Select //用沙箱闭包其整个代码,只有itcast和I暴漏在全局作用域 (function( window , und ...
- Cad 二次开发关于SelectCrossingPolygon和SelectFence返回结果Status为error的小测试
CAD2008的二次开发,有个很奇怪的现象,只要你选择的点集不在当前视图上SelectCrossingPolygon和SelectFence返回结果Status就会为error,所以要获取正确的结果, ...
- Huxley 是一个用于Web应用 UI 测试的工具
Huxley 是一个用于Web应用 UI 测试的工具,由 Pete Hunt 和 Maykel Loomans 用 Python 开发. UI 测试比较令人头疼. UI测试不好写,而且很容易失效: ...
随机推荐
- unbutton 内部title label多行显示
dateBtn1.titleLabel.lineBreakMode = NSLineBreakByWordWrapping; [dateBtn1 setTitle: @第一行\n第二行" f ...
- C#在Winform程序中显示QQ在线状态
首先,引入必要的命名空间 using System.Windows.Forms; using System.Net; 其次,在Form中拖入一个PictureBox控件,并设置其SizeMode为A ...
- Date时间
var date_obj= new Date(); alert(date_obj.toLocaleString()) //2017/12/26 上午1:10:54 var date_obj2= new ...
- Linux renew ip command
$ sudo dhclient -r //release ip 释放IP$ sudo dhclient //获取IP Now obtain fresh IP:$ sudo dhcli ...
- idea maven编译jdk报错
<!--自己添加的,用来控制maven编译时的jdk版本--> <plugins> <plugin> <groupId>org.apache.maven ...
- NOIP水题测试(2017082401)
哈,水题测试又来了! 上次的水题简单吧! 答案是以单题形式发布的(旅行家的预算随后发布). 下面来看今天的题,还是水题. 时间限制:5小时 题目一:看上去就很水 题目二:比上面一题还水 题目三:数的划 ...
- 添加/删除-HTML DOM 常用对象 -BOM-打开和关闭窗口- history-location
1. 添加/删除 3步: 1. 添加一个空元素 var a=document.createElement("a"); <a></a> 2. 定义元素的关键属 ...
- keras框架的MLP手写数字识别MNIST,梳理?
keras框架的MLP手写数字识别MNIST 代码: # coding: utf-8 # In[1]: import numpy as np import pandas as pd from kera ...
- c#的装箱和拆箱及值类型和引用类型
装箱:它允许根据值类型创建一个对象,然后使用对这新对象的一个引用. int i = 5; object o = i; int j = (int)o; 装箱:运行时将在堆上创建一个包含值5的对象(它是一 ...
- centos7 hbase 搭建笔记
1.require:java环境,本地可用的hadoop 2.拷贝hbase文件(hive-1.2.6) 3.设置环境变量 export HBASE_HOME=/data/spark/bin/hbas ...