1
我有一個系統啓動一個新的線程與應用程序的每個請求。 如果應用程序收到數百個請求,則可能沒有足夠的內存可用於啓動新線程,因此它將引發異常。處理,如果沒有足夠的內存可用來啓動此線程c#
我想知道處理這種情況的理想機制。 喜歡,如果應用程序正在接收大量的請求,那麼如果沒有足夠的內存或活動線程數達到最大,那麼我會延遲處理其他請求。
但我不知道如何實現這一點。
我有一個系統啓動一個新的線程與應用程序的每個請求。 如果應用程序收到數百個請求,則可能沒有足夠的內存可用於啓動新線程,因此它將引發異常。處理,如果沒有足夠的內存可用來啓動此線程c#
我想知道處理這種情況的理想機制。 喜歡,如果應用程序正在接收大量的請求,那麼如果沒有足夠的內存或活動線程數達到最大,那麼我會延遲處理其他請求。
但我不知道如何實現這一點。
簡單解決方案:增加線程池限制。這實際上是可行的,儘管這些日子過時了。
更徹底的解決方案:使用SemaphoreSlim
來限制併發異步活動請求的數量。確保等待異步。如果你同步等待,你會在等待的時候再次燒掉一個線程。在異步等待之後,您可以恢復正常的同步阻塞處理。這隻需要很小的代碼更改。
最徹底的解決方案:完全異步實現您的處理。這樣你永遠不會用完線程。
我不使用後臺線程這些都是前臺線程,所以我不認爲線程池會幫助。無論如何,我從來沒有使用SemaphoreSlim。我會檢查。謝謝 – FatalError
好的,然後以最小堆棧大小啓動這些線程。可以輕鬆保存超過默認1MB的4倍內存。 – usr
我正在循環內啓動線程。最初,所有請求都將放在一個數組上,然後每個請求都將在一個新線程上執行。可以請求。詳細闡述你的陳述「以最小堆棧大小啓動這些線程」。我們如何獲得最小堆棧大小以及我應該在哪裏提及它。 – FatalError