在基础知识里 我们都知道 定义了static的变量,那么它的生命周期 会随着应用程序结束而结束,
也就是说 整个进程退出了 这个变量的内存才会释放。
而使用了Using关键字 是当前对象 实现了IDisposable接口 会在运行当前域后释放
如:
Using{类型变量} { //执行代码 }//运行完毕 交给GC内存释放
那么 Using(静态变量) 会发生什么呢?
举个我现在遇到的问题
//静态数据库连接 public static IDbConnection _Connection { get; set; } /// <summary> /// 根据Id获取实体对象 /// </summary> /// <param name="id"></param> /// <returns></returns> public TEntity GetById(object id) { using (_Connection) { _Connection.Open(); var item = _Connection.Get<TEntity>(id); _Connection.Close(); return item; } }
小弟基础不是很好 所以想问问大神像这种情况 我定义 Using是不是 矛盾了或者多余了?
经过测试 在静态变量 使用了 Using关键字 也会跟释放
感觉using不是这样用的吧。
你的_Connection出了using作用域后,会调用Dispose()方法,释放非托管资源。
但是这个时候_Connection对象的引用还保持着,垃圾回收器并不会回收_Connection对象。