我有一个有关释放非管理对象的查询。由于非托管对象不直接受CLR控制,所以CLR不能直接释放它,为此我们调用dispose命令,但如果我们在该非托管对象的应用程序中未使用dispose命令,则该对象占用的资源将如何释放。未管理对象的内存管理
For Ex。如果在C#代码中,我使用连接对象作为
try
{
string strConnectionString = "";
strConnectionString = "Server=FTSPROD\\FTS_PROD;Database=tdps_uat;User ID=txnapp;password=txnapp;Min Pool Size=5;Max Pool Size=10000;";
for (int i = 0; i < 10000; i++)
{
SqlConnection cnUpdateTransaction;
cnUpdateTransaction = new SqlConnection(strConnectionString);
cnUpdateTransaction.Open();
cnUpdateTransaction.
//cnUpdateTransaction.Close();
}
}
catch (Exception Ex)
{
}
在这里,我打开10000个连接对象实例并将它留给垃圾收集。现在,因为它们是非托管对象,所以我不会调用close或dispose,然后最终如何释放这些对象。操作系统是否会为此和当做些什么。请分享你的这个问题的一些文件链接。
你正在通过下面的不良做法:初始化变量为“”,然后立即将其设置为其他内容;通过不实施'使用'块;并通过在代码中包含连接字符串并发布代码(提示:现在更改数据库密码**)。 –
我知道你所说的所有事情,但是这里写的代码是非常基本的,它的目的只是为了知道如果我们多次打开非托管连接并且没有调用dispose或close方法,这个非托管连接对象将被释放。另外我还没有看到在C#中实现这个类(SqlConnection)的任何终结器。# – funsukvangdu