我有一个Azure数据库,它仅限于60个并发连接。我的问题是,我有几个爬虫填充这个数据库,以供我们的网站使用实体框架。
很快,多个爬虫就会耗尽所有的连接和错误。我尝试在连接字符串中设置最大池大小值,但这似乎没有对实际的数据库连接强制执行任何限制。
我可以将DbContext
封装在一个单例中,但这样我就会将整个爬虫限制在一个连接上。
还有其他方法来实现这一点吗?
发布于 2016-08-09 22:17:26
您正试图限制对共享资源的并发访问。通常使用的是信号量。
若要跨单个框或应用程序执行此操作,可以使用信号量或SemaphoreSlim。
但是,如果客户端运行在不同的框上,那么放置信号量的自然位置将是Server本身。有关实现它的一种方法,请参见这篇文章。在使用DbContext
访问数据库之前,应用程序需要调用proc来获取锁。信号量限制需要59,才能保持一个读取信号量的连接。
https://stackoverflow.com/questions/38745658
复制相似问题