2015-02-04 28 views
0

我刚刚在服务器上设置了一个玩具学习ColdFusion页面。该页面会呼叫某个函数,该函数会获取当前日期,确定年份,然后返回一个布尔值,以反映当前年份是否为闰年。这些信息以纯文本形式显示在主页面上。Coldfusion玩具页面内存泄漏

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

故障排除步骤编号1.从该函数获取代码并将其放入.cfm页面的循环中。看看问题是否仍然存在。 –

+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)>

,因为该功能将只返回一个布尔值。

+0

其实,这个规则是不正确的。公历有一个奇怪的特点,那就是几年可以整除4年而不是闰年。无论如何,这不是真正的速度。 – lyonssp

+0

OP是正确的,当“Year/100”时,它也必须被4.wwu.edu/skywise/leapyear.html整除,所以1700,1800和1900不是闰年,而是1600和2000。 –

0

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

+0

很高兴你知道,但它听起来像是一个本地化的问题。如果实际解决方案对其他人不适用,则应删除该线程。 – Leigh

+0

@Leigh我报告说它已被模组删除。我如何自己删除它? – lyonssp

+0

老实说,我不确定。我认为问题所有者可以看到“删除”选项。如果没有,请等待我猜测的mods。 – Leigh