gpt4 book ai didi

.net - 是否有任何理由处理表适配器?

转载 作者:行者123 更新时间:2023-12-04 05:58:38 25 4
gpt4 key购买 nike

在许多情况下,当处理不同类型的数据对象时,处理它们以确保它们不会打开数据库连接是很重要的。然而,表适配器似乎并不容易受到这个问题的影响,因为它们建立在断开数据的原则之上。我的印象是,即使在存在异常的情况下,表适配器也会在原子填充或更新方法完成后始终关闭它的连接。这样对吗?

另一方面,表适配器确实实现了 IDisposable,所以在某些时候一定有一些非托管资源需要清理,对吗?或者这只是一个仪式,以便人们可以写:

using(var a = new MyTableTableAdapter())
{
a.Fill(ds.MyTable);
}

而不必考虑这个话题?

最佳答案

如果它实现了 IDisposable,它要么当前拥有要处理的资源,要么将来可能会处理。如果它是一次性的,你应该处理它。不是让你了解它的内部结构——只需要了解它的契约并尊重它。通常,人们不会在仪式之外做事-“使用”是很酷的语法糖,但还不够酷,无法开始在没有资源可处理的类周围散布 IDisposable :)

此外,IDisposable 并不一定意味着“非托管”资源。这意味着有些资源(如文件句柄、网络连接等)不是被垃圾收集的对象(内存)。区别在于清理未收集的东西 - 不是未管理的。 碰巧经常其中许多资源由非托管操作系统资源支持。

编辑:

例如,假设我创建了一个完全托管的对象,该对象根据需要从池(缓存)中检索一些其他对象,当您使用完它时,我希望它将这些对象放回共享池中(未释放 - 一个显式调用将某些内容添加到池中。这里没有任何未管理的内容,但我可以根据需要从池中提取对象,并且在处置时我可以将它们放回 (Pool.Add) 供其他人使用。消费者只需“使用”我的对象并且知道它会在处理时清理。需要显式处理,因为我们不应该等待完成(它可能会在稍后发生或根本不会发生) –

关于.net - 是否有任何理由处理表适配器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9204319/

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