.net - 有什么理由要丢弃 table 适配器吗?

标签 .net dataset strongly-typed-dataset tableadapter

在许多情况下,当使用不同类型的数据对象时,处理它们以确保它们不会使数据库连接保持打开状态非常重要。然而,表适配器似乎不容易受到这个问题的影响,因为它们是基于断开数据的原则构建的。我的印象是,即使存在异常,表适配器也始终会在原子 Fill 或 Update 方法完成后关闭其连接。这是正确的吗?

另一方面,表适配器确实实现了 IDisposable,因此必须在某个时刻清理一些非托管资源,对吧?或者这只是一个仪式,以便人们可以写:

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

并且不必考虑这个话题?

最佳答案

如果它实现了 IDisposable,它要么当前拥有要处置的资源,要么将来可能会处置。如果是一次性的,则应将其丢弃。你不需要了解它的内部结构,而只是了解它的契约(Contract)并遵守它。通常,人们不会出于仪式而做事 - “使用”是很酷的语法糖,但还不够酷,不足以开始在没有资源可处置的类周围散布 IDisposable :)

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

编辑:

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

关于.net - 有什么理由要丢弃 table 适配器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9204319/

相关文章:

c# - System.Data 处理器架构设置为 AMD64

c# - 编译的正则表达式性能不如预期?

java - Apache 弗林克 : When using count() on DataSet only this job will be executed

c# - TIME(2) 列的值显示为带有额外的精度零,而查询仅返回 2

.net - 强类型数据集中子查询的计算

c# - 类型化数据集的正确用法

c - 如何在 .NET 应用程序中执行 C 代码?

c# - 在类 (Employee-Job) 上创建双向关系列表属性

java - DBunit 和数据集列

.net - 如何在强类型数据集中将DBNull作为值包含在内?