sách gpt4 ai đã đi

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

In lại Tác giả: Space Dog 更新时间:2023-10-29 20:58:52 27 4
mua khóa gpt4 Nike

出于方便和安全的原因,我想使用 sử dụng 语句从池中分配和释放对象

public class Resource : IDisposable
{
public void Dispose()
{
ResourcePool.ReleaseResource(this);
}
}

public class ResourcePool
{
static Stack pool = new Stack();

public static Resource GetResource()
{
return pool.Pop();
}

public static void ReleaseResource(Resource r)
{
pool.Push(r);
}
}

和访问池一样

using (Resource r = ResourcePool.GetResource())
{
r.DoSomething();
}

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

1 Câu trả lời

这根本不是滥用 - 这是 C# 的常见范围处理习惯用法。例如,ADO.NET 对象(连接、语句、查询结果)通常包含在 sử dụng 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/

27 4 0
Bài viết được đề xuất: c# - 如何为 C# 配置 Eclipse
Bài viết được đề xuất: python - 设置值多索引 Pandas
Bài viết được đề xuất: python - 在 Python 3.2 中绘制具有 n 个边的多边形
Bài viết được đề xuất: c++ - 如何保存和恢复 std::istringstream 的缓冲区?
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com