2012-04-12 129 views
1

我有一個複雜的,非常複雜的ASP.NET WebForm與大ViewState。目前,爲了降低瀏覽器的影響(通過縮小__VIEWSTATE隱藏輸入字段),我使用PageAdapterSessionPageStatePersisterViewState存儲在Session內。ViewState,會話和狀態服務器

但是,我想將會話模式從InProc更改爲StateServer,以便我可以降低RAM使用率並避免網站重新啓動和應用程序池回收問題。我是否需要將ViewState退出會話?還是可以保持原樣?在未來,我也想要負載均衡,但是我聽說我只能使用「粘性會話」,這樣可能不會強制我進入StateServer。

注意:我目前使用.NET 2.0(集成),但我願意更新。

+0

你應該沒有問題,因爲ViewState的是序列化的。不過,我希望您閱讀Scott Hanselman對此的看法 - http://www.hanselman.com/blog/MovingViewStateToTheSessionObjectAndMoreWrongheadedness.aspx - 我們在具有大ViewStates的頁面上更有效地使用了HttpCompression,因此避免了任何會話內存開銷。粘滯會話將確保用戶轉到單個服務器;如果你今天內存不足,那麼他們不會幫助 - 他們可以幫助解決問題,如果用戶能夠在每次請求時能夠訪問不同的服務器,則必須分發狀態。 – dash 2012-04-12 17:03:33

回答

0

SessionPageStatePersister將您的Viewstate存儲在會話對象中,無論您的會話恰好存儲在何處。對於你的會話是否是InProc,SQL或StateServer,它是完全不可知的,它應該繼續工作而無需做任何事情。

2

還有一些其他的選擇我會去了解一下才去這條路線...

我會考慮的第一件事是ViewState的壓縮,這可以減少高達60%,減少的ViewState的大小。 Telerik的提供了一個很好的壓縮模塊,你可以找到here

其次,你可以設置ViewState字段,這將迫使ASP.NET劃分多個隱藏字段ViewState的一個最大長度。這通常會產生更好的頁面性能。您可以在web.config這樣設置PageStateFieldLength

<pages maxPageStateFieldLength="100"></pages> 
相關問題