gpt4 book ai didi

C# - 从类方法返回的连接泄漏

转载 作者:行者123 更新时间:2023-11-30 16:16:11 25 4
gpt4 key购买 nike

我已经从 Connection 类中的类方法返回了一个连接。在我的另一个类中,我实例化连接类以打开连接。我也关闭了连接,但似乎有连接泄漏。知道我该如何解决它。我的代码如下

public class Connection
{
private SqlConnection _oConn;

public SqlConnection GetConnection
{
get
{
if (_oConn == null)
{
string sConnString = ConfigurationManager.ConnectionStrings["bplocator_database_connection"].ConnectionString;

_oConn = new SqlConnection(sConnString);

}
return _oConn;
}
}
}

在另一个类文件中,我调用这个连接类

 private BPAdmin.data.Connection oConn
{
get
{
if (_oConn == null)
{
_oConn = new BPAdmin.data.Connection();
}
return _oConn;
}
}

public void getData
{
try
{
oConn.GetConnection.Open();
//Do something
}

catch
{
oConn.GetConnection.Close();
}
finally
{
oConn.GetConnection.Close();
}
}

我发现这会导致连接泄漏并导致应用程序池达到最大值。知道出了什么问题以及如何解决它。请帮忙!

最佳答案

你有两个选择

  1. 使用using语句
  2. finally 而不是 Close 中调用 Dispose

两种解决方案都应该可以解决问题。

更新:如何使用using语句

因为 oConn 总是在 getData 中返回一个新对象,您可以使用以下方法:

 public void getData()
{
try
{
using(var conection=oConn.GetConnection)
{
//execute your query
}

}
catch
{
//do something to show user an error or just log it
}
finally
{
//you do not have to close connection because using statement will do this for you
}
}

关于C# - 从类方法返回的连接泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18710504/

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