Asp.net

ASP.NET 會話狀態性能基準

  • March 23, 2014

我找到了很多比較 InProc、StateServer 和 SQLServer 以進行 ASP.NET 狀態管理的重要資訊,但我似乎找不到任何性能基準比較。很明顯,InProc 比 StateServer 快,而 StateServer 又比 SQLServer 快,但不清楚多快。我意識到它會因應用程序和環境而有很大差異,但是對它們的比較有一個相對的了解是很有價值的。

你知道你可以分享的任何基準測試嗎?或者對此有任何個人經驗?謝謝!

DevOps Guys 有一個很好的基準。 http://www.slideshare.net/devopsguys/best-performing-aspnet-session-state-providers比較

  • ASP.Net 程序內
  • ASP.Net 會話狀態伺服器
  • ASP.Net Sql 伺服器
  • 沙發底座
  • 蒙古數據庫
  • 烏鴉數據庫
  • Redis(這個,TheCloudlessSky,不是這個AngiesList

AppHarbor 也推薦 memcached,但沒有基準。 http://support.appharbor.com/kb/tips-and-tricks/using-memcached-backed-sessionprovider 並提供 Session Provider https://github.com/friism/Memcached-Providers

我有個人經驗,但沒有基准或實際記錄的指標可以分享。我們最初創建了一個 Asp.Net 站點,該站點使用 InProc 方法在會話中儲存了比通常更大的使用者對象。我們發現對象的大小和錯誤處理庫的性質導致了 2 個不良行為。第一個是在程序期間以隨機間隔回收應用程序池。因為 w3wp.exe 程序會在中途回收自身,所以它實際上會轉儲會話並且對象會失去。這導致其他程式碼啟動並修復會話,並增加了我們事務的延遲。我們還發現(雖然這不是一個可怕的問題,我只是在嘗試調試我剛剛描述的記憶體失去時才發現)會話中對象的大小以及頁面本身的庫中載入的一些對象會導致w3wp.exe 反复頁面進出。對於只涉及會話對像或這些庫對象但不涉及兩者的較小請求,程序上沒有奇怪的分頁行為。

在從 InProc 遷移到 StateServer 時,我們發現了回收的直接回報。池實際上最終回收較少,即使它這樣做了,我們的會話對像也保留在單獨的記憶體中。我們還注意到,這創建了一個通用的“僅庫”條件,如上所述關於分頁,我們沒有再次遇到它(儘管我承認我在正常執行 1 個月後停止檢查)。當時我們確實在訪問某些框架庫時發現了非常小的延遲,但是當我們從 2.0 升級到 3.5 時,這些訪問異常完全消失了。當我們很快從 3.5 升級到 4.0 時,我們希望有類似的行為。

嘗試使用 SQLServer 作為狀態控制器的測試站點,我們發現的唯一延遲是初始會話創建/儲存。在 SQL 中更新/訪問會話的後續呼叫與 StateServer 選項沒有真正的區別。我沒有任何指標,但在任何系統上都沒有任何跡象表明行為存在差異。時間戳在各個方面都有可比的差異。儘管很少有使用潛力,但我們確實獲得了一個好處,那就是我們能夠將我們的使用者數據庫直接與會話狀態伺服器耦合,並直接比較時間戳、狀態和其他專門的會話變數。我們並沒有真正需要這個功能,而且 StateServer 選項已經在我們的生產伺服器上全面展開,因此決定保持原樣。

最後,說服我們為 StateServer 轉儲 InProc 的不是速度,而是記憶體使用量。訪問速度的好處肯定不會超過首先將數據保存在記憶體中的需要。

引用自:https://stackoverflow.com/questions/5967682