按标题提问。
我有一段代码可以做到这一点:
using (SqlConnection dbcon = new SqlConnection(connectionString))
using (SqlDataAdapter dataAdapter = new SqlDataAdapter(statement, dbcon))
{
dat_set = new System.Data.DataSet();
dbcon.Open();
dataAdapter.Fill(dat_set, name);
}
当我在dataAdapter仍在填充数据集时强行退出程序时,程序冻结并停止响应。
我知道“使用”块会在资源超出范围时释放资源,但在强制终止的情况下,资源是否会优雅地释放?
答案 0 :(得分:7)
如果进程退出,则操作系统会清除所有本机资源(网络句柄,文件句柄等)。我不会期望 using
语句在这里生效 - 我怀疑操作系统会杀死线程太难以让它有机会做清理本身。这意味着你仍然会完成清理......但是你可能期望在using
语句中发生的任何冲洗(例如在文件编写方案中)可能不会发生。
答案 1 :(得分:1)
using
语句只是执行try-finally
块的简单方法。所以真正的问题是,如果你强制退出程序,finally
阻止运行,答案是“否”。
但是,程序终止时会释放所有外部句柄(包括您在代码示例中打开的数据库连接),因此即使finally块从未运行,也不会有孤立的数据库连接。当连接终止时,任何仍处于打开状态的事务都将回滚并撤消(即使您没有显式启动事务,所有请求都会包含在隐式事务中)。