[英]What actually happens when using async/await inside a LINQ statement?
[英]What happens to the objects created inside a using statement?
我一直在尝试搜索此内容,但找不到答案,可能是我没有在正确的地方寻找,所以请多多包涵...
题:
我知道using
语句调用对象的dispose方法,例如:
using (SqlConnection conn = new SqlConnection(conString))
{
// some work
}
// dispose method for this connection object will be called must.
但是在using
语句内部创建的对象会发生什么呢?
using (SqlConnection conn = new SqlConnection(conString))
{
SqlCommand cmd = new SqlCommand(query, conn);
// some work
}
命令对象的dispose方法也会被调用吗? 还是我应该这样做:
using (SqlConnection conn = new SqlConnection(conString))
{
using (SqlCommand cmd = new SqlCommand(query, conn))
{
//some work
}
// some work
}
哪一种是最佳做法,哪一种会更有效?
命令对象的dispose方法也会被调用吗?
没有
还是我应该这样做:
是
哪一种是最佳做法,哪一种会更有效?
有效的一个-最后一个。 请注意,您可以避免在页面上“右移”:
using (SqlConnection conn = new SqlConnection(conString))
using (SqlCommand cmd = new SqlCommand(query, conn))
{
// some work
}
我太懒了,不能直接使用ADO.NET。 另一个选择是获得一个工具来处理除连接以外的所有内容(示例显示为“ dapper”,但存在其他工具):
using (SqlConnection conn = new SqlConnection(conString))
{
var data = conn.Query<SomeType>(someSql, new { foo, bar }).ToList();
// where @foo and @bar are parameters in the sql
}
那么您就不必担心命令,数据读取器,参数等。
是的,您应该使用第二个。 您也可以将该语句缩短为:
using (SqlConnection conn = new SqlConnection(conString))
using (SqlCommand cmd = new SqlCommand(query, conn))
{
//some work
}
// some work
如果不using
语句包装一次性对象,则不会调用Dispose方法。在这种情况下,将仅处理connection
。
我知道using语句调用对象的dispose方法,例如:
如果该对象实现IDisposable
接口。 否则,您甚至不能在using
语句中使用对象。
在执行某些操作后,应该对要处置的每个对象使用using
语句。 因此,您应该使用自己提供的最后一个示例(带有两个using语句)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.