c# – 使用和Dispose()滥用范围处理不被释放的对象?
发布时间:2020-12-15 17:43:58 所属栏目:百科 来源:网络整理
导读:出于方便和安全的原因,我想使用using语句来分配和释放来自/到池的对象 public class Resource : IDisposable{ public void Dispose() { ResourcePool.ReleaseResource(this); }}public class ResourcePool{ static StackResource pool = new StackResource()
出于方便和安全的原因,我想使用using语句来分配和释放来自/到池的对象
public class Resource : IDisposable { public void Dispose() { ResourcePool.ReleaseResource(this); } } public class ResourcePool { static Stack<Resource> pool = new Stack<Resource>(); public static Resource GetResource() { return pool.Pop(); } public static void ReleaseResource(Resource r) { pool.Push(r); } } 和访问池一样 using (Resource r = ResourcePool.GetResource()) { r.DoSomething(); } 我发现了一些关于滥用使用和Dispose()进行范围处理的主题,但所有这些主题都使用了(Blah b = _NEW_ Blah()). 解决方法
这根本不是滥用 – 这是C#的常见范围处理习惯用语.例如,ADO.NET对象(连接,语句,查询结果)通常包含在使用块中,即使其中一些对象在其Dispose方法中被释放回其池中:
using (var conn = new SqlConnection(dbConnectionString)) { // conn is visible inside this scope ... } // conn gets released back to its connection pool (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |