2015-12-03 38 views
0

請問能理解本主題的專業人員回答我的問題嗎?在所有會話中頻繁引用應用程序變量

我用傳統的ASP工作,對不起,如果我的問題似乎是微不足道的,但我不理解反覆引用的應用程序變量是閱讀而不是修改的開銷。

我已經宣佈,緩存大的字符串和其他陣列全局應用程序級的變量。

在sessionOntart中,我將應用程序變量分配給會話變量。然後,在每個頁面上,我將會話變量分配給本地變量以避免重複使用會話變量。

我的問題是我能不能直接和重複使用的應用程序變量在每個頁面上的每個會話,否則此操作創建一個問題嗎? 換言之,考慮以下兩種情況:

方案1:

--in applicationOnStart:

申請(「globalArray」)=大陣列的數千串和數組元素的

--in sessionOnStart:

會議(「globalArray」)=的應用(「globalArray」)

- 兼論網站的每一個頁面:

昏暗anArray anArray =會議(「globalArray」) 現在使用anArray作爲根據需要多次。

塞納里奧2:

--in applicationOnStart:

申請(「globalArray」)=大陣列的數千串和數組元素的

- 論的網站使用的每一頁根據需要應用(「globalArray」)多次。

我的問題:考慮到繁忙的網絡流量,是方案2或更好的方案1?

回答

0

我不確定我是否可以根據提供的信息明確回答這個問題,但我會從邏輯上說,情景#1聽起來效率低下,似乎沒有實際用途,除非每個用戶都需要他們自己的獨特globalArray中包含不同的值,或者除非Application變量經常更改,並且您只想在稍後特定時間爲用戶獲取新副本。

這聽起來如果初始化該數組中ApplicationStart喜歡和你在SessionStart創建一個副本,每次用戶登錄時,你可能沒有在任何其他點處改變數值。如果我的理解是正確的,那麼我會傾向於場景#2來減少不必要的內存消耗。

舉例來說,如果你有1000個用戶登錄時,你真的需要1000個不同的這座大陣的副本存儲(場景#1),或只是其中的複印件(場景#2)?

+0

感謝您的回覆。答案是沒有必要爲每個用戶提供數組的唯一副本。我只需要了解在每個會話中多次寬鬆地使用應用程序變量是否可行。所以我的理解是,根據需要經常使用應用程序變量來訪問它的內容沒有任何開銷。你確認嗎? – Dave123

+0

@ Dave123基本上,是的。與僅具有一個對象的中心副本相比,在內存中具有數百或數千個同一對象的副本會有相當多的開銷。但是,如果對象可以更改,那麼有一個由多個用戶共享的副本可能會出現併發問題,但正如我所瞭解的那樣,此對象是隻讀的,因此您最好在內存中只使用一個副本。 – wweicker

+0

再次感謝您的回覆。我很感激。如果你不介意我問這個相關的問題有這個Miicrosoft提示頁面在https://msdn.microsoft.com/en-us/library/ms972335.aspx#asptips_topic4 在tip2下,最後一段說:「用自定義方法構建自定義組件來存儲氣象站會好得多「。 這個信息對我很模糊。你認爲他們的意思是從數據庫中獲取站點然後循環,並將每個站點分配給一個數組元素。然後通過com方法訪問數組以使用更少的內存? – Dave123

相關問題