gpt4 book ai didi

c# - 每次不使用就创建不同的数据库上下文有什么问题吗

转载 作者:搜寻专家 更新时间:2023-10-30 23:25:42 24 4
gpt4 key购买 nike

好吧,我想知道使用下面的方法可能会出现什么问题

CreateContextFactory().Create().QueryOpenConnectionCount();

代替:

using (var context = CreateContextFactory().Create())
{
openConnectionCount = context.QueryOpenConnectionCount();
}
return openConnectionCount;

如果有任何问题,例如:

CreateContextFactory().Create().QueryOpenConnectionCount1();
CreateContextFactory().Create().QueryOpenConnectionCount2();
CreateContextFactory().Create().QueryOpenConnectionCount3();

这是因为我在一个类中有一些方法是如上所述的开放数据库上下文,我可以为它们创建一个 using 语句,但是我需要为所有方法传递上下文,我还需要重构一个使用数据库上下文执行事务的助手(因为它在内部创建了自己的上下文)。那么让代码一直这样有什么问题呢?

最佳答案

通常,一个数据上下文“拥有”一个连接,以避免不断地从池中获取一个连接并对其进行初始化。处理数据上下文通常会处理该连接。

因此:如果您一直创建数据上下文而没有正确地处理它们,那么您正在破坏连接,至少直到 GC 介入并消除困惑(释放非托管 部分连接回到非托管池,如果非托管部分)。

这是一件坏事,它会严重限制可伸缩性并增加与数据库服务器的打开连接数。所以是的,你应该处理你的数据上下文。将其扩展到一般情况:当您处理完您负责任何 IDisposable 事物时。可能有一些异常(exception)(HttpClientDataTable 等)。

请注意,如果您的 using 语句到达当前范围(即到下一个 }):

using var context = CreateContextFactory().Create();
return context.QueryOpenConnectionCount();

或者甚至使用早期的 C#,您可以使其更简单并删除本地:

using (var context = CreateContextFactory().Create())
{
return context.QueryOpenConnectionCount();
}

关于c# - 每次不使用就创建不同的数据库上下文有什么问题吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58408877/

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