1

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

例子。UserOne 访问网页 > Application.cfc 在内存块 1 处创建。 UserTwo 访问网页 > Application.cfc 在内存块 1 被再次调用,但函数 onRequestStart 被调用。

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

谁能解释一下谢谢。

4

2 回答 2

6

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

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

ColdFusion Application.cfc - 执行顺序

以及 adobe 文档:

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

活动用户计数器就像伪代码一样简单:

onApplicationStart {application.activeUsers = 0} 
onSessionStart {application.activeUsers++} 
onSessionEnd {application.activeUsers--}

清除一些混乱

this”范围用于设置应用程序设置,例如名称、sessionTimeOut 或 customTagPaths。这些设置内置于 ColdFusion。

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

尽管“this”范围与应用程序相关,但您不能使用它来设置持久的应用程序范围变量。应用程序变量是使用“应用程序”设置的。语法,通常最初在 onApplicationStart() 函数中设置。

<cfset application.myVariable = "I am the same value for every user">
于 2012-10-30T10:40:01.757 回答
0

你的假设是正确的

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

来源

应用程序变量可用于应用程序内的所有页面,即具有相同应用程序名称的页面。因为应用程序变量是持久的,所以您可以轻松地在页面之间传递值。

来源

也值得注意

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

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

...

来源

于 2012-10-30T10:36:40.167 回答