您现在的位置: 无忧电子商务网 >> 信息学院 >> 程序开发 >> asp.net >> 正文

Community Server专题七: Job & Timer

作者:佚名    信息学院来源:整理    点击数:    更新时间:2008-1-30 我要参与讨论

  Job实例化的非托管资源(其实就是调用Timer与Job下面的Dispose方法,这也是为什么Job要实现IDispose接口的原因,是想一下,如果前一次定义的定时器没有被释放,然后又接着实例化一个,然后这样多重复几次...哈哈,你的CS就会有N个线程在跑,服务器很快就会挂掉的)。

释放完资源后(无论有没有CS都会这么做),接着就会实例化每个实现了IJob的类,根据上述的配置文件定义一个Timer或者让每个Job都定义一个自己的Timer(这就相当于给钟点工统一一个工作时间或者给每个钟点工都规定一个工作时间,规定完后该干什么的就干去吧,只要时间到了就得干活)。再往下,就自己分析吧,也就没有什么难题了…

不知道为什么我的团队中的几个成员老是不能理解这个执行过程,我解释了半天,最后发现了问题:

回到CSHttpModule.cs文件中来,这是一个实现了IHttpModule接口的类,实现该接口的类都要有一个Init方法,我们看到,所有的Job开始初始化的起点也是从这个方法中调用的。但是我的小组成员都认为每个Http请求都会调用一次Init方法,

public void Init(HttpApplication application)

{

    // Wire-up application events

    //

    application.BeginRequest += new EventHandler(this.Application_BeginRequest);

    application.AuthenticateRequest += new EventHandler(Application_AuthenticateRequest);

    application.Error += new EventHandler(this.Application_OnError);

    application.AuthorizeRequest += new EventHandler(this.Application_AuthorizeRequest);

   

    //settingsID = SiteSettingsManager.GetSiteSettings(application.Context).SettingsID;

    Jobs.Instance().Start();

    //CSException ex = new CSException(CSExceptionType.ApplicationStart, "Appication Started " +  AppDomain.CurrentDomain.FriendlyName);

    //ex.Log();

}

也就是说每个请求都实例化一个CSHttpModule,如果是这样Init方法就会多次被调用,那么如果有1000个Http请求Jobs就会Start 1000次,这本来就分析不通。

其实认为CSHttpModule会被实例化多次就是

上一页  [1] [2] [3] [4] [5] [6] [7] 下一页

在google里搜索更多Community Server专题七: Job & Timer

Google
Web www.51ec.org
【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
我来说两句 对此文章发表了评论
  昵 称: *必填    ·注册用户·
  评 分: 1分 2分 3分 4分 5分     严禁发表危害国家安全、政治、黄色淫秽等内容的评论,用户需对自己在使用本网站服务过程中的行为承担法律责任。本站管理员有权保留或删除评论内容,评论内容只代表机友个人观点,与本网站立场无关。  
评 论
内 容

 
评论列表 (最新 评论仅限网友观点!)

供求信息




| 设为首页 | 加入收藏 | 关于我们 | 广告服务 | 联系方式 | 友情链接 | 版权申明