我有一个Azure数据库,限制为60个并发连接。我的问题是我有几个爬虫填充这个数据库,供我们的网站使用Entity Framework使用。
多个抓取工具不会耗尽所有连接和错误。我已尝试在连接字符串中设置max pool size值,但这似乎并未对实际数据库连接强制实施任何限制。
我可以将DbContext
包装成单例,但是我会将整个爬虫限制为单个连接。
还有其他方法可以达到这个目的吗?
答案 0 :(得分:4)
您正尝试限制对共享资源的并发访问。通常会使用Semaphore。
要在单个框或单个应用中执行此操作,您可以使用Semaphore or SemaphoreSlim
但是,如果客户端在不同的盒子上运行,则放置信号量的自然位置将是SQL Server本身。有关实现它的一种方法,请参阅this article。在使用DbContext
访问数据库之前,应用程序需要调用proc来获取锁。信号量限制需要为59才能保持一个连接以读取信号量。