我正在使用C#linq到sql应用程序,我的应用程序在服务器上运行24 * 7。现在我面临问题数据库连接他们没有关闭所以主动连接达到200甚至更多。我在任何地方都使用语法直接处理数据库。
但这不能解决我的问题。请检查并让我知道我能为此做些什么。
提供商始终禁用我的数据库。
using (DataClassesDataContext DbContext = new DataClassesDataContext())
{
return DbContext.tblApiLinks.FirstOrDefault(U => U.ProviderName == ProviderName);
}
using (DataClassesDataContext DbContext = new DataClassesDataContext())
{
tblApiLink Apilink = new tblApiLink();
Apilink.ApiUrl = Url;
Apilink.ApiKey = Key;
Apilink.ProviderName = Provider;
DbContext.tblApiLinks.InsertOnSubmit(Apilink);
DbContext.SubmitChanges();
}
新编辑
案例1.请检查这些代码返回表格。这会影响关闭连接吗?
public tblApiLink getData()
{
using (DataClassesDataContext DbContext = new DataClassesDataContext())
{
return DbContext.tblApiLinks.FirstOrDefault(U => U.ProviderName == ProviderName);
}
}
tblApiLink api = getData();
案例2.如果我像这样使用tblApiLinks lst = dbContext.tblApiLinks; 我认为这不会关闭连接,它们将一直处于活动状态。
案例3.是否有办法关闭所有长时间未使用的睡眠连接。
答案 0 :(得分:0)
在“case 1”中尝试设置一个存储要返回内容的变量,并在使用块关闭后返回该值。
示例:
tblApiLink returnData = null;
using(DataClassesDataContext DbContext = new DataClassesDataContext())
{
returnData = DbContext.tblApiLinks.FirstOrDefault(U => U.ProviderName == ProviderName);
}
return returnData;
旁注:类型tblApiLink
未根据惯例正确命名,我建议您尽可能重构它。
案例2:我不明白你的意思。
案例3:您可以使用处理连接并关闭它们的单例,但正确的方法是处置不再处于活动状态的连接。如果您真的想杀死活动连接,那么您最好的选择是在服务器上,手动或存储您稍后可以调用的过程。