gpt4 book ai didi

.Net 4.0 上的 SQL 句柄泄漏,但 .Net 3.5 上没有

转载 作者:行者123 更新时间:2023-12-05 00:25:29 25 4
gpt4 key购买 nike

以下示例代码泄漏句柄。句柄数从 133 开始,不到 2 小时就达到了 900。示例是 VS2010 和 .Net 4.0。这不会发生在 .Net 3.5 上。我已经在 3 多台机器上重现了这个,都是 Win2008 R2 服务器。 SQL 2008 和 SQL 2012。这些机器是虚拟机,每周不断回滚两次,所以很干净。

//Reference dll are the ones required for SQL 
//.Net 4.0 (not 'Client Profile' version)
static void Main(string[] args)
{

string sss = "Data Source=WIN-0BDHQ0IIUFL,1433;Initial Catalog=DB_Mycentral;Persist Security Info=False;User ID=Myuser;Password=123;Connect Timeout=60;Network Library=dbmssocn";
System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection(sss);
int i = 0;
while (true)
{
i++;

Thread.Sleep(1000 * 60 * 60);
Console.WriteLine("{0} hrs sleep", i);
}
}

我观察到 ProcMon.exe 中的事件和 ProcExp.exe 中的调用堆栈。 ProcMon.exe 记录 CreateThread() 和 ExitThread() 重复。然后 ProcExp.exe 显示cld.dll!StrongNameErrorInfo+0​​x18910 针对新创建的 TID。最后,ProcExp.exe 中的 THREAD 对象计数增加了一个。整个过程一次又一次地重复。

Example for leaking of TID 9089:
CreateThread()/ExitThread() TID:9089 //Log in ProcMon.exe
cld.dll!StrongNameErrorInfo+0x18910 TID: 9089 //Call-stack in ProcExp.exe

背景:我编写此示例是为了缩小生产代码中的漏洞。该代码在 .Net 3.5 中运行良好,但在 .Net 4.0 中出现泄漏。

如果我在打开连接时必须设置额外的标志,请告诉我。

最佳答案

使用 'using' 确保始终调用 dispose 方法。

参见 http://msdn.microsoft.com/en-us/library/yh598w02.aspx

//Reference dll are the ones required for SQL 
//.Net 4.0 (not 'Client Profile' version)
static void Main(string[] args)
{

string sss = "Data Source=WIN-0BDHQ0IIUFL,1433;Initial Catalog=DB_Mycentral;Persist Security Info=False;User ID=Myuser;Password=123;Connect Timeout=60;Network Library=dbmssocn";
using(System.Data.SqlClient.SqlConnection connection = new System.Data.SqlClient.SqlConnection(sss))
{

int i = 0;
while (true)
{
i++;

Thread.Sleep(1000 * 60 * 60);
Console.WriteLine("{0} hrs sleep", i);
}
}
}

关于.Net 4.0 上的 SQL 句柄泄漏,但 .Net 3.5 上没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18277702/

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