4

我有一個限制爲60個併發連接的Azure數據庫。我的問題是,我有幾個爬蟲,填充這個數據庫,供我們的網站使用實體框架使用。使用實體框架C限制與數據庫的連接#

對於多個爬蟲來說,耗盡所有連接和錯誤並不需要很長時間。我已經嘗試在連接字符串中設置最大池大小值,但這似乎沒有對實際數據庫連接施加任何限制。

我可以用單身包裝DbContext,但我會限制整個爬蟲到一個連接。

還有其他方法可以實現嗎?

+0

您使用的是什麼版本的EF?結合你的連接字符串中的'Max Pool Size = 60;',你是否設置了'Pooling = true;'? *(儘管如此,「真實」應該是默認設置)* –

+0

完成之後,您是否未釋放連接? –

+0

@GeoffJames是Pooling設置爲true。我曾嘗試設置最大池大小= 1;看看我是否可以限制連接。儘管如此,它仍然會產生更多的連接。我目前使用EF 6.1.3。我嘗試過Core,但按問題分組使其完全無法使用。 – mscard02

回答

4

您試圖限制對共享資源的併發訪問。通常一個Semaphore用於此。

要做到這一點對一個盒子或單一的應用程序,如果客戶在不同的機器上運行的天然場所放置信號將是SQL Server本身,你可以使用Semaphore or SemaphoreSlim

不過。請參閱this article以瞭解實現它的一種方式。在使用DbContext訪問數據庫之前,應用程序需要調用proc來獲取鎖定。信號量限制將需要59以保持讀取信號量的一個連接。