gpt4 book ai didi

c# - 滥用 Dispose() 来处理不被释放的对象?

转载 作者:太空狗 更新时间:2023-10-29 20:58:52 25 4
gpt4 key购买 nike

出于方便和安全的原因,我想使用 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();
}

我发现了一些关于滥用 usingDispose() 进行范围处理的主题,但它们都包含 using (Blah b = _NEW_ Blah()).
这里的对象在离开使用范围后不会被释放,而是保留在池中。
如果 using 语句简单地扩展为普通的 try finally Dispose() 这应该可以正常工作,但是幕后是否发生了更多事情,或者这在未来的 .Net 版本中可能不起作用?

最佳答案

这根本不是滥用 - 这是 C# 的常见范围处理习惯用法。例如,ADO.NET 对象(连接、语句、查询结果)通常包含在 using block 中,即使其中一些对象在它们的 Dispose 中被释放回它们的池中> 方法:

using (var conn = new SqlConnection(dbConnectionString)) {
// conn is visible inside this scope
...
} // conn gets released back to its connection pool

关于c# - 滥用 Dispose() 来处理不被释放的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18110626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com