Coldfusion CFC创建占用可变的执行时间

Coldfusion CFC创建占用可变的执行时间,coldfusion,components,long-integer,cfc,execution-time,Coldfusion,Components,Long Integer,Cfc,Execution Time,我一直在做一些记录的对象创建时间在我们的开放帐户过程中的生产。周期性地初始化一个对象将花费比预期更长的时间。初始化的意思是调用它的init()并传递两个参数,这些参数可能是简单的变量或对象。e、 g <cfset validateObj = createObject("component", "compExample").init( productionMode = VARIABLES.productionMode, ipWhiteListed = is

我一直在做一些记录的对象创建时间在我们的开放帐户过程中的生产。周期性地初始化一个对象将花费比预期更长的时间。初始化的意思是调用它的init()并传递两个参数,这些参数可能是简单的变量或对象。e、 g

<cfset validateObj = createObject("component", "compExample").init( 
        productionMode = VARIABLES.productionMode, 
        ipWhiteListed = isWhiteListed, 
        ipLocatorObj = VARIABLES.ipLocatorObj ) />

这就是init()方法中发生的所有事情。通常执行时间为0毫秒,但在随机时间我可能会得到3秒或3.5秒。这并不是特定于某个特定的服务器或我们通常繁忙的时期。这似乎是相当随机的

一种想法是,这些模板被从我们的模板缓存中逐出,因为它们不是特别经常使用,尽管我在许多服务器上检查了cfstat,最大CP/Sec为-1

运行CF 8,0,1


有没有其他人遇到过这种情况?

您是否有可能从服务器管理器运行探查器?这导致了我们类似的随机缓慢。

一些想法。。。。网络/Web服务/数据库上是否存在任何锁定或依赖项。您是否有任何正在进行的审计或类似活动(例如AOP)


还有,您使用的是什么CF版本?服务器是否正在运行.1更新(如果适用,即8.01)。

该init方法中可能有调用其他内容的内容会导致随机性能降低。这可能是由于init方法如何将参数存储在CFC中

在CFC init方法中,它只是:

<cfset variables.productionMode = arguments.productionMode />

或使用setter方法,例如:

<cfset setProductionMode(arguments.productionMode) />

也许是一个好主意

<cfset structAppend(variables, arguments) />

第一种方法,只是一个简单的设置,最不可能引起任何问题。 第二种方法是使用setter方法,它可以根据setter方法正在做什么、它可能调用的其他方法等来降低速度。。。 第三种方法应该是相当一致的,但我看到structAppend和其他内部函数在没有明显原因的情况下随机减慢

我认为约翰·惠斯的评论绝对值得研究。另外,当init方法的速度减慢时,此服务器上是否会出现任何奇数流量


您是否尝试过仅隔离createObject()调用,以查看它是导致速度减慢的对象实例化,还是确实是init方法?通常在CF中,对象实例化可能是一个随机缓慢的过程。最近在CF 8中可能更好,但经验表明这可能是问题所在。

始终将jvm升级到最新版本,然后查看问题是否仍然存在。

增加了模板缓存中的最大项数。由于缓存使用LRU,并且这些对象特定于不经常使用的功能,因此它们被从缓存中逐出。更新了一半的服务器,保持一半不变,并在周末后进行比较。在缓存增加的服务器上,对象实例化时间大幅减少。

嗨,Greg,我使用的是第一种方法,即直接设置。我们使用的是cf8。我将尝试隔离createObject(),但相信在调用方法之前它不会被实际实例化。感谢Bazza,我实际上只是在从cf7切换到cf9的过程中,我忘记了CF8实际上可能会在调用createObject后立即自动调用init方法,我不确定。我知道在CF 7中,init只是一个伪构造函数,从未被CF自动调用过。另一种隔离的方法可能只是在init方法的最顶端,看看这是对象创建的惩罚还是该方法的一些奇怪之处。祝你好运嗨,John,使用带有.1更新的CF8,init方法中没有网络/webservice/database活动,这很奇怪。没有正在进行的审计。