我有一个限制为 60 个并发连接的 Azure 数据库。我的问题是我有几个爬虫填充这个数据库以供我们的网站使用 Entity Framework 使用。
多个爬虫很快就会耗尽所有连接并出错。我曾尝试在连接字符串中设置最大池大小值,但这似乎并未对实际数据库连接施加任何限制。
我可以将 DbContext
包装在一个单例中,但这样我就会将整个爬虫限制为单个连接。
还有其他方法可以实现吗?
最佳答案
您正在尝试限制对共享资源的并发访问。通常是 Semaphore用于此。
要在单个盒子或单个应用程序中执行此操作,您可以使用 Semaphore or SemaphoreSlim
但是,如果客户端在不同的机器上运行,放置信号量的自然位置将是 SQL Server 本身。参见 this article实现它的一种方法。在使用 DbContext
访问数据库之前,应用程序需要调用 proc 来获取锁。信号量限制需要为 59 才能保持一个连接以读取信号量。
关于c# - 使用 Entity Framework C# 限制与数据库的连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38745658/