Codefluent:线程结束后仍保持与数据库的连接
Codefluent: Connections to the database remain after thread ends
如果我运行下面的代码,很多与数据库的连接仍然无所事事。您可以通过运行ning查看打开的连接数:
SELECT COUNT(dbid) as TotalConnections FROM sys.sysprocesses WHERE dbid > 0
或者,如果您需要更多详细信息 运行,请执行以下命令。您会看到很多具有 'AWAITING COMMAND' 状态的连接:
sp_who2
我原以为 Codefluent Persistency 上下文会在线程退出并关闭连接后消失。如何强制 Codefluent 关闭池中的连接?
public void TestThreads()
{
for (var i = 0; i < 1000; i++)
{
var t = new Thread(() => StaticticThreadContainer.Test());
t.Start();
}
}
public static int Test()
{
var p = CwObject.LoadByEntityKey("baf04c09-7415-497d-b3cd-00004266f503");
return 1;
}
我发现了更多。如果我在返回线程之前调用以下代码,连接将正确关闭。这是要走的路吗?
CodeFluentContext.Get(Compareware.Constants.ApplicationStoreName).Persistence.ResetConnection();
CodeFluent 实体使用 LocalDataStoreSlot
存储每个线程的上下文。当一个线程终止时,线程局部数据不会自动释放。
因此,在终止线程之前,您必须调用 Dispose
方法:
CodeFluent.Runtime.CodeFluentContext.GetExisting(Constants.MyStoreName)?.Persistence.Dispose(true);
Meziantou 回答了我的问题,但提到的过载不存在。
下面的代码应该可以解决问题:
CodeFluent.Runtime.CodeFluentContext.GetExisting(Constants.MyStoreName)?.Persistence.ResetConnection();
CodeFluent.Runtime.CodeFluentContext.GetExisting(Constants.MyStoreName)?.Persistence.Dispose();
如果我运行下面的代码,很多与数据库的连接仍然无所事事。您可以通过运行ning查看打开的连接数:
SELECT COUNT(dbid) as TotalConnections FROM sys.sysprocesses WHERE dbid > 0
或者,如果您需要更多详细信息 运行,请执行以下命令。您会看到很多具有 'AWAITING COMMAND' 状态的连接:
sp_who2
我原以为 Codefluent Persistency 上下文会在线程退出并关闭连接后消失。如何强制 Codefluent 关闭池中的连接?
public void TestThreads()
{
for (var i = 0; i < 1000; i++)
{
var t = new Thread(() => StaticticThreadContainer.Test());
t.Start();
}
}
public static int Test()
{
var p = CwObject.LoadByEntityKey("baf04c09-7415-497d-b3cd-00004266f503");
return 1;
}
我发现了更多。如果我在返回线程之前调用以下代码,连接将正确关闭。这是要走的路吗?
CodeFluentContext.Get(Compareware.Constants.ApplicationStoreName).Persistence.ResetConnection();
CodeFluent 实体使用 LocalDataStoreSlot
存储每个线程的上下文。当一个线程终止时,线程局部数据不会自动释放。
因此,在终止线程之前,您必须调用 Dispose
方法:
CodeFluent.Runtime.CodeFluentContext.GetExisting(Constants.MyStoreName)?.Persistence.Dispose(true);
Meziantou 回答了我的问题,但提到的过载不存在。 下面的代码应该可以解决问题:
CodeFluent.Runtime.CodeFluentContext.GetExisting(Constants.MyStoreName)?.Persistence.ResetConnection();
CodeFluent.Runtime.CodeFluentContext.GetExisting(Constants.MyStoreName)?.Persistence.Dispose();