2015-02-04 25 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