Asp.net

ASP.NET (MVC) 輸出記憶體和並發請求

  • January 21, 2016

假設從理論上講,我的網站中有一個頁面/控制器操作,它做了一些非常繁重的事情。完成它的操作大約需要 10 秒。

現在,我使用 .NET 的 outputcache 機制將其記憶體 15 分鐘(例如,我使用[OutputCache(Duration = 900)])如果 15 分鐘後記憶體過期並且 100 個使用者在執行重加工?

  1. 繁重的東西只做第一次,有一些鎖定機制,讓其他99個使用者得到記憶體結果
  2. 繁重的工作完成了 100 次(伺服器癱瘓,因為它可能需要 100 * 10 秒)

可能是簡單的問題,但我不是 100% 確定。不過,我希望它是第一名:-)

謝謝!

好吧,這取決於您如何配置 IIS。如果您的工作執行緒少於 100 個(比如說 50 個),那麼“繁重的工作”會執行 50 次,從而削弱您的伺服器,然後將從記憶體中提供剩餘的 50 個請求。

但是不,記憶體的動作結果沒有“鎖定機制”;在大多數情況下,這會適得其反。

編輯:我相信這是真的,但尼克的測試不是這樣,我現在沒有時間測試。自己試試吧!不過,其餘的答案並不依賴於上述內容,我認為這更重要。

然而,一般來說,沒有任何 Web 請求,無論是記憶體的還是其他的,都應該需要 10 秒才能返回。如果我站在你的立場上,我會以某種方式預先計算請求的困難部分。如果要記憶體 HTML,您仍然可以記憶體操作結果,但聽起來您的問題比這要大一些。

可能還想考慮非同步控制器。最後,請注意,儘管 IIS 和 ASP.NET MVC 不會鎖定這種繁重的計算,但您可以。如果您將非同步控制器與計算鎖定結合使用,那麼您將有效地獲得您所要求的行為。如果不知道更多關於你在做什麼,我真的不能說這是否是最好的解決方案。

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