c# - C# 限制池连接
问题描述
我知道在 c# 中默认池大小为 100,但我想将池大小限制为 20,并且必须对 db 的剩余请求进行排队,在必须解除固定时间未处理的请求后,我尝试了以下连接字符串并发送了 100 个请求一次使用邮递员,但它处理了所有请求并且没有通过任何异常。
connection.ConnectionString = "Server=servername;Database=dbname;Trusted_Connection=true;Connection Timeout=0;Connection Lifetime=30;Min Pool Size=0;Max Pool Size=20;Pooling=true;"
解决方案
具有 20 个锁的资源锁定形式不会起作用吗?例如
static readonly object SomeLock = new object();
using (var lck = new CodeLock())
{
var ok = lck.Lock(SomeLock, timeout)
// do stuff, connect to db
}
public struct CodeLock : IDisposable
{
private object lockedObject;
private bool lockTaken;
public bool Lock(object someLock, int timeout)
{
lockedObject = someLock;
Monitor.TryEnter(someLock, timeout, ref lockTaken);
if (lockTaken == false)
{
// didn't acquire lock within timeout
return false;
}
return true;
}
public void Dispose()
{
if (lockedObject == null) return;
if (lockTaken)
{
lockTaken = false;
Monitor.Exit(lockedObject);
}
}
}
推荐阅读
- performance - numactl & perf 如何更改子进程的内存放置策略?
- postgresql - PostgreSQL 在标识列上创建表失败
- python - 我将如何为简化的井字游戏编写此功能?
- r - 整理ggplot饼图
- html - 如何使用给定的 XML 文件创建 HTML 页面?
- javascript - 如何获得 4by4 网格来显示我所有的拼图?
- python - 如何找到 vscode 正在使用的 isort
- c# - 从 Azure 表存储 OData 筛选器查询中读取超过 1000 行?
- python - 我可以使用 Python configparser 删除 config.ini 文件的一部分中的特定值吗?
- python - aruco.estimatePoseSingleMarkers() 产生的值有多准确?