NEWS
在發布或更新網站進行測試時,往往會遇到一些小問題,而往往這些小問題也就反映了自己基礎的不扎實。在這里給自己補補課。
在發布或更新網站進行測試時,往往會遇到一些小問題,而往往這些小問題也就反映了自己基礎的不扎實。在這里給自己補補課。
今天更新了一個網站,其中網站用到了Application對象,里面存了個Boolean值,是用來判斷系統是否已經注冊的(在Global.asax中判斷是否已經注冊,然后更新該值)。當把最新的DLL文件覆蓋原有舊文件后,發現網站跳轉到注冊頁面。這就奇怪了,Application對象不是全局的,整個應用程序生命周期中都存儲在內存中嗎? 趕緊查看了MSDN,原來沒考慮到Application對象的“易失性”。
參考MSDN原文(http://msdn.microsoft.com/zh-cn/library/ms178594.aspx)
使用應用程序狀態時,必須注意以下重要事項:
資源 由于應用程序狀態存儲在內存中,因此比將數據保存到磁盤或數據庫中速度更快。 但是,在應用程序狀態中存儲較大的數據塊可能會耗盡服務器內存,這會導致服務器將內存分頁到磁盤。 除了使用應用程序狀態之外,還可以使用 ASP.NET 緩存機制來存儲大量的應用程序數據。 ASP.NET 緩存也是將數據存儲在內存中,因此速度很快;但是,ASP.NET 會對緩存進行主動管理,如果內存不足時將移除項。 有關更多信息,請參見 ASP.NET 緩存概述。
易失性 由于應用程序狀態存儲在服務器內存中,因此每當停止或重新啟動應用程序時應用程序狀態都將丟失。 例如,如果更改了 Web.config 文件,則要重新啟動應用程序,此時除非將應用程序狀態值寫入非易失性存儲媒體(如數據庫)中,否則所有應用程序狀態都將丟失。
可伸縮性 應用程序狀態不能在為同一應用程序服務的多個服務器間(如在網絡場中)共享,也不能在同一服務器上為同一應用程序服務的多個輔助進程間(如在網絡園中)共享。 因此,應用程序不能依靠應用程序狀態來實現在不同的服務器或進程間包含相同的應用程序狀態數據。 如果應用程序要在多處理器或多服務器環境中運行,可以考慮對必須在應用程序中準確保存的數據使用伸縮性更強的選項(如數據庫)。
并發 應用程序狀態采用自由線程模式,即應用程序狀態數據可由多個線程同時訪問。 因此,必須確保通過包含內置同步支持,以線程安全的方式進行應用程序狀態數據更新。 可以使用 Lock 和 UnLock 方法來確保數據的完整性,方法是鎖定數據,使其一次只能由一個源進行寫操作。 還可以初始化 Global.asax 文件中 Application_Start 方法中的應用程序狀態值,降低出現并發問題的可能性。
微網站Webapp 拓勝科技專業訂制開發微信網站制作,讓微信公眾賬號實現微菜單、微活動、微會員、微商城等功能,打造炫麗的企業微網站!公眾平臺搭配"微網站",猶如虎添翼!在保留公眾平臺所有優勢的前提下,提升展示形象,更好的與客戶互動。