PetaPoco.Database实现了IDisposable,所以为什么大多数例子都没有使用'声明?

时间:2015-10-30 20:28:36

标签: c# .net dispose idisposable petapoco

PetaPoco.Database对象实现了IDisposable,但我很少看到包含using声明的代码示例(包括在PetaPoco' s own website上),如下所示:

using (var db = new Database("MyConnectionString"))
{
    // Do database stuff
}

我经常看到:

var db = new Database("MyConnectionString");
// Do database stuff
// I never see .Dispose() called.

如何实际交付PetaPoco.Database对象?

5 个答案:

答案 0 :(得分:3)

作为一个简单的规则:如果一个类实现了IDisposable,那么继续将它包装在一个using中。他们可能实际上并没有使用任何非托管资源,但它不会受到伤害,并且可能在未来证明您不会受到更改。

答案 1 :(得分:1)

PetaPoco维护者在这里。 Dispose与调用CloseSharedConnection()相同。但是,c#语法仅支持在IDisposable中使用(...)。例如,来自内存的IDBConnection支持CloseDispose

基本上,它归结为选择

示例1

using(var db = new PetaPoco()) 
{
    // some code
}

示例2

var db = new PetaPoco()

try 
{
    // code
}
finally 
{
    db.CloseSharedConnection();
}

答案 2 :(得分:0)

这取决于你正在实施什么。数据库对象是数据库的连接,每次在数据库中执行sql语句时都不想处置连接,因为性能会很差。

如果要实现基于Web的解决方案,通常每个请求使用一个Database对象,但该请求肯定会在不同的过滤器,全局过滤器和多个控制器的方法中执行多个sql语句,因此您可以&#39 ; t使用Using

答案 3 :(得分:0)

GC致电Object.Finalize。 GC不会调用IDisposable,必须手动调用它。 GC与usingIDisposable

无关

答案 4 :(得分:-3)

IDisposable告诉GC想要摆脱object时该做什么。
using要求GC在其范围结束时删除object 使用using object并非IDisposable是没用的。