gpt4 book ai didi

c# - 如何最小化并发数据库连接数?

转载 作者:行者123 更新时间:2023-11-30 20:04:03 29 4
gpt4 key购买 nike

我的托管公司阻止我的网站使用超过 15 个并发数据库连接。但是在我的代码中,我关闭了我打开的每一个连接。但他们仍然说并发连接太多。并建议我更改网站源代码的解决方案。那么请告诉我关于这个的解决方案?而且我的网站是动态的,那么将其设为静态的简单 HTML 过去类型会有所不同吗?

另请注意,当我想不出解决方案时,我尝试了此方法,在每个 con.open() 之前,我添加了 con.Close(),以便任何其他打开的连接将被关闭。

最佳答案

首先要做的是检查打开连接的时间 - 看看是否可以将其最小化。例如,您在不同的连接上执行“n+1”?

如果您有一个单个服务器,这里的技术解决方案是一个信号量——例如,类似于:

someSemaphore.TakeOne();
try {
using(var conn = GetConnection()) {
...
}
} finally {
someSemaphore.Release();
}

这将(假设某些信号量是共享的,例如 static)确保您一次只能进入该 block “n”次。在您的情况下,您将创建具有 15 个空格的信号量:

static readonly Semaphore someSemaphore = new Semaphore(15,15);

但是!建议小心:在某些情况下,您可能会遇到死锁:假设 2 个写得不好的线程每个需要 9 个连接——线程 A 需要 7 个,线程 B 需要 8 个。它们都需要更多——但都不会得到它们。因此,使用带有超时的 WaitOne 很重要:

static void TakeConnection() {
if(!someSemaphore.TakeOne(3000)) {
throw new TimeoutException("Unable to reserve connection");
}
}
static void ReleaseConnection() {
someSemaphore.Release();
}
...
TakeConnection();
try {
using(var conn = GetConnection()) {
...
}
} finally {
ReleaseConnection();
}

也可以将其包装在 IDisposable 中以方便使用。

关于c# - 如何最小化并发数据库连接数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13657476/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com