application.cfc是否在内存中是静态的?

时间:2012-10-30 10:14:24

标签: coldfusion application.cfc

我在coldfusion中尝试Application.cfc。我想知道application.cfc在内存中是否是静态的,即它是为第一个用户创建的,并且在每个访问它的用户之后访问相同的application.cfc(在内存中)。

实施例。 UserOne访问网页> Application.cfc在内存块1中创建。 UserTwo访问网页>再次调用内存块1上的Application.cfc,但调用函数onRequestStart。

我是否正确地说application.cfc在内存中是静态的(或直到它过期)或是否为每个用户重新创建?如果是这会是一个巨大的记忆问题吗?

有人可以解释谢谢。

2 个答案:

答案 0 :(得分:6)

针对每个请求执行Application.cfc,但根据情况仅运行部分请求。伪构造函数(您设置this.name类型设置的位置)每次都会执行,并且无法进行有问题的更改。 onApplicationStart()仅在应用程序不存在时运行。应用程序作用域变量可供每个会话访问,并且每个应用程序实例(不是会话实例)仅存在一次。 onSessionStart()仅在新访问者第一次访问该站点时运行。还有其他事件特定功能

这是另一个可能对您的问题有所帮助的主题。

  

ColdFusion Application.cfc - order of execution

以及adobe docs:

  

http://help.adobe.com/en_US/ColdFusion/10.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-74fa.html

活跃的用户计数器就像伪代码

一样简单
onApplicationStart {application.activeUsers = 0} 
onSessionStart {application.activeUsers++} 
onSessionEnd {application.activeUsers--}

消除一些困惑

'this'范围用于设置应用程序设置,例如name,sessionTimeOut或customTagPaths。这些设置内置于ColdFusion中。

<cfscript>
    this.customtagpaths = expandPath('./customtags');
    this.name = "myCoolWebsite";
    this.sessionmanagement = "Yes" ;
    this.sessionTimeOut = CreateTimeSpan(0,0,20,0);
</cfscript>

虽然'this'范围与应用程序相关,但您无法使用它来设置持久应用程序范围变量。应用程序变量是使用'application。'语法设置的,通常最初在onApplicationStart()函数中设置。

<cfset application.myVariable = "I am the same value for every user">

答案 1 :(得分:0)

您的假设是正确的

  

应用程序事件是生命周期中的特定事件   一个应用程序。每次发生其中一个事件时,ColdFusion都会运行   Application.cfc文件中的相应方法(也称为   作为申请CFC)。 Application.cfc文件定义   应用程序设置和实现处理应用程序的方法   事件

Source

  

应用程序变量可用于所有页面   应用程序,即具有相同应用程序名称的页面。   因为应用程序变量是持久的,所以您很容易通过   页面之间的值。

Source

另外值得注意的是

  

cflock标记控制对ColdFusion代码的同时访问。该   cflock标签可让您执行以下操作:

     
      
  • 保护访问和操作共享数据的代码段   会话,应用程序和服务器范围,以及请求和   使用ColdFusion线程的应用程序的变量范围。
  •   
     

...

Source