2014-06-23 75 views
1

95%的時間有沒有辦法使用IIS inProc方案,同時維護和更新會話狀態變量?你可以結合inProc和會話狀態的最佳?

理想情況下,如果在關閉應用程序池回收的情況下,它會刷新會話狀態服務中的inProc數據。

使用InProc和會話狀態之間大約有200毫秒的差異,所以如果這是所有可能的話,它會真的加快程序。否則,穩定性問題讓我不得不使用會話狀態。

+0

在哪裏呢會話狀態將數據存儲? – haim770

+0

這是窗口的會話狀態服務。記憶也很可能,但在一個不同的過程中。它還必須在每次調用中序列化/反序列化。所以如果我只能在必要時進行反序列化,它會大大提高性能。 – Scottingham

回答

0

我最終使用的解決方案是使用具有緩存部分的HttpContextBase。

這緩存在應用程序池的內存中。所有用戶都可以訪問它,這對我的應用程序來說實際上是完美的。

例子:

HttpContextBase httpContext; 
     CacheObject NCO = (CacheObject)httpContext.Cache["CacheName"]; 
1

如果我理解正確,大部分時間你都想使用InProc,而有時需要使用StateServer。 正如你所說的「95%的時間」,這看起來像你需要自定義的東西。

所以也許你應該implement a session state store provider。您可以使用InProc mode source code作爲起點。您還擁有StateServer provider here的源代碼。

這種方法的問題是,這兩個類都是internal sealed,所以你不能很容易地訪問它們。你可以重用它們的源代碼,或者用反射來調用它們,或者使用表達式lambda來生成一個方法......我認爲那裏沒有完美的解決方案。

另一種解決方案是從零開始重新構建滿足您需求的會話狀態存儲,但這會更加複雜且容易出錯。

相關問題