All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
开发环境下优化SQl语句的十个重要步骤_mssql学习_编程技术
C#的Windows编程中多语言的实现_.net资料_编程技术
oracle,SQL性能优化_mssql学习_编程技术
利用C#来做ASP.NET的登陆页面_[Asp.Net教程]
C#,如何获取图片长宽_[Asp.Net教程]
关于XHTML头部声明,什么是DOCTYPE?_[Html教程]
PHP安全基础,注射基础经验技巧汇总篇_php资料_编程技术
ASP.NET页面HEAD区动态设置全攻略_[Asp.Net教程]
浅谈.NET中的数据绑定表达式_[Asp.Net教程]
X-Space:日志发布后首页为何不更新-_php资料_编程技术
Reading number is top 10 pictures
Embarrassing things comic collection2
More attractive than sora aoi2
The goddess of the single reason2
The money of more than 100 countries and regions7
美女就是美女
Chinese paper-cut grilles art appreciation2
Send some Valentine's day cartoon
浴室里的美女
Athena chu perspective cheongsam shine with New York
Chinese paper-cut grilles art appreciation8
Download software ranking
功夫熊猫2(上集)
The cock of the Grosvenor LTD handsome
Boxer's Top ten classic battle10
艳兽都市
在线棋牌游戏3.05版
I'm come from Beijing1
株洲本地在线棋牌游戏
matrix3
圣殿祭司的ASP.NET.2.0.开发详解-使用C#
网络管理员第三版
qq published in(发表于) 2014/7/9 1:34:48 Edit(编辑)
.NET Remoting 租约机制管理有状态的对象的生存期

.NET Remoting 租约机制管理有状态的对象的生存期

.NET Remoting 租约机制管理有状态的对象的生存期

.NET Remoting 租约机制管理有状态的对象的生存期

在CLR(公共语言运行库)中,框架提供了GC(垃圾回收器)来管理内存中对象的生命周期。同样的,.Net Remoting使用了一种分布式垃圾回收,基于租用的形式来管理远程对象的生命周期。

早期的DCOM体系对于对象生命周期的管理是通过ping和引用计数来确定对象何时应当作为垃圾回收。然而ping引起的网络流量对分布式应用程序的性能是一种负担,它极大地影响了分布式处理的整体性能。

.Net Remoting在每个应用程序域中都引入一个租用管理器,为每个服务器端的SingleTon(远处对象的模式,指明服务器所有的客户端都可以共享对象),或每个客户端激活的远程对象保存着对租用对象的引用。

说明:服务器端激活的SingleCall远程对象模式是指每一次调用远程对象时,都会创建一个新的实例。这意味着它是无状态的,对于每个激活的远程对象,都由CLR的GC(垃圾回收器)来自动回收,因此对于SingleCall模式激活的远程对象,不存在生命周期的管理。

下面详细介绍管理远程类对象的3个部分。

1.租用

租用是个封装了TimeSpan类型值的对象,用以管理远程对象的生存期。在.Net Remoting中提供了定义租用功能的ILease接口。当Remoting通过SingleTon模式或客户端激活模式来激活远程对象时,租用对象调用从System.MarshalByRefObject类继承的InitializeLifetimeService方法,向对象请求租用。

ILease接口定义了有关生命周期的属性,均为TimeSpan值,具体介绍如下所示。

InitialLeaseTime:初始化有效时间,默认值为300s,如果为0,表示永不过期。

RenewOnCallTime:调用远程对象一个方法时的租用更新时间,默认值为120s。

SponsorshipTimeout:超时值,通知Sponsor(发起人)租用过期后,Remoting会等待的时间,默认值为120s。

CurrentLeaseTime:当前租用时间,首次获得租用时,为InitializeLeaseTime的值。

Remoting的远程对象因为继承了MarshalByRefObject类,因此默认继承了InitializeLifetime Service方法,那么租用的相关属性为默认值。如果要改变这些设置,可以在远程对象中重写该方法。例如:

public override object InitializeLifetimeService()

{

ILease lease = (ILease)base.InitializeLifetimeService();

if (lease.CurrentState == LeaseState.Initial)

{

lease.InitialLeaseTime = TimeSpan.FromMinutes(1);

lease.RenewOnCallTime = TimeSpan.FromSeconds(20);

}

return lease;

}

将对象的租用周期改变为无限,代码如下:

public override object InitializeLifetimeService()

{

return null;

}

2.租用管理器

租用管理器是服务器端专门用来管理远程对象生命周期的管理器,它维持着一个System.Hashtable成员,将租用映射为System.DateTime实例,表示每个租用何时应过期。Remoting采用轮询的方式以一定的时间唤醒租用管理器,检查每个租用是否过期。默认为每10s唤醒一次。轮询的间隔可以配置,如将轮询间隔设置为5min,代码如下:

LifetimeService.LeaseManagerPollTime = System.TimeSpan.FromMinutes(5);

在租用管理器中设置远程对象租用的属性,如改变远程对象的初始有效时间为永久有效,代码如下:

LifetimeServices.LeaseTime = TimeSpan.Zero;

通过配置文件来设置生命周期,代码如下:










添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.