Coldfusion玩具页面内存泄漏

时间:2015-02-04 19:41:38

标签: memory memory-leaks coldfusion webserver coldfusion-11

我刚在服务器上设置了一个学习ColdFusion页面的小玩具。该页面调用一个cffunction,它获取当前日期,确定年份,然后返回一个布尔值,反映当前年份是否为闰年。此信息以纯文本显示在主页上。

page.cfm

<html>
<head>
        <cfinclude template="./func.cfm" />
</head>
<body>
        <cfset yearList = "2000;2001,2002/2003,2004,2005;2006/2007,2008,2009;2010,2011,2012" >

        <cfloop index="year" list=#yearList# delimiters=",;/" >

                <cfset isLeapYear = #My_IsLeapYear(year)# >

                <cfif isLeapYear is True>
                        <cfoutput>
                                #year# is a leap year!
                        </cfoutput>

                        <cfelse>
                                <cfoutput>
                                #year# is not a leap year.
                                </cfoutput>
                </cfif>
                <br>
        </cfloop>

</body>
</html>

func.cfm

<cffunction name="My_IsLeapYear" output="false" access="public" returnType="boolean">
        <cfargument name="year" type="numeric" required="true" default="" />
        <cfset var isLeapYear = (DaysInYear(CreateDate(arguments.year,1,1)) EQ 366) />

        <cfreturn isLeapYear>
</cffunction>

尝试访问此页面导致可怕的内存泄漏,并关闭托管它的服务器。我不知所措。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

我认为这是检查此问题的更快捷方式:

<cfset yearList = "2000;2001,2002/2003,2004,2005;2006/2007,2008,2009;2010,2011,2012" >

<cfoutput>
<cfloop index="year" list="#yearList#" delimiters=",;/" >
        <p>#year# is <cfif !(val(year) MOD 4 EQ 0)>not </cfif>a leap year!</p>
</cfloop>
</cfoutput>

避免对DaysInYear()进行更昂贵的调用。您只需要检查year的值是否为可被4整除的数字。

<强>更新

重点:计算。至于原始功能,您只需返回比较结果即可。无需创建函数局部变量。

<cffunction name="My_IsLeapYear" output="false" access="public" returnType="boolean">
        <cfargument name="year" type="numeric" required="true" default="" />
        <cfreturn (DaysInYear(CreateDate(arguments.year,1,1)) EQ 366) />
</cffunction>

并在page.cfm中,您可以更改此代码:

<cfset isLeapYear = #My_IsLeapYear(year)# >
<cfif isLeapYear is True>

更简单的电话:

<cfif My_IsLeapYear(year)>

因为该函数只返回一个布尔值。

答案 1 :(得分:0)

内存泄漏是由一个奇怪的外部问题引起的。感谢您的评论等。