手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>delphi>列表

浅谈引用计数

来源:互联网 作者:西部数码 时间:2008-04-10
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!
if Result = 0 then

Destroy;

end;

从代码中我们可以看出,接口的生命周期是在_AddRef and _Release两个方法中控制的,事实上,这两个方面在组件编程中,就是专门用来控制组件的生命周期(关于组件生命周期和接口生命周期我们将会近一步的进行说明。),之外它们可以说是没有意义的,而引用计数变量(FRefCount)如果在不考虑组件的生命周期时,也是完全没有意义的。

AddRef and Release是实现的一种名为引用计数的内存管理技术,引用计数技术是使组件自己删除组件的最简单的同时也是效率最高的方法。COM组件将维护一个引用计数的变量来对自己生命周期进行管理,当客户从组件获得一个接口时,这个引用计数变量会进行增1操作(_AddRef),当客户释放了对接口的调用时,组件会自动的进行引用计数的减1操作(_Release),在基于Delphi的编程中,我们可以不去考虑什么时候进行调用这两个方法,但是如果您一旦脱离了Delphi的话,您可能必须要考虑什么时候调用这两个方法,如在C 中,您就一定要自己调用这两个方法,这也正是笔者为什么会写这一节的内容.简单的来说,引用计数我们平时不需要去考虑,但是在对象引用和接口引用中,您就需要自己去调用这两个方法,同时它还涉及到作为一个组件是去整个的释放还是单个的释放上以及最小单位的释放上是有必要去考虑引用计数的。如:对于一个COM组件而言,它封装了一些COM对象,但是用户通过接口可能需要调用COM组件中的几个COM对象提供的服务,那么问题就产生了,用户有可能在访问完了一个COM对象再去访问另一个COM对象或是进行互动的方式进行访问,很不幸运的是这个组件又是一个占用内存资用很大的组件,特别提体到用户所访问的两个或是更多的COM对象的同时,您如何对组件进行有效的管理呢?是用户访问完了一个COM对象之后就立马释放这个COM对象呢?还是当用户对组件访问完成之后再进行组件级的释放呢?或是您更详细的对每一个用户已经不用的接口进行释放呢?这都对组件的效率有些许影响。而此时我们选择不同的方式就有可能需要自己增加引用计数变量进行控制了,如:

var

oFRefCount : Integer;//对象一级的引用计数的应用

begin

…….

end;

var

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!