我刚在服务器上设置了一个学习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>
尝试访问此页面导致可怕的内存泄漏,并关闭托管它的服务器。我不知所措。有什么想法吗?
答案 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)
内存泄漏是由一个奇怪的外部问题引起的。感谢您的评论等。