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对象?
答案 0 :(得分:3)
作为一个简单的规则:如果一个类实现了IDisposable,那么继续将它包装在一个using中。他们可能实际上并没有使用任何非托管资源,但它不会受到伤害,并且可能在未来证明您不会受到更改。
答案 1 :(得分:1)
PetaPoco维护者在这里。 Dispose与调用CloseSharedConnection()
相同。但是,c#语法仅支持在IDisposable
中使用(...)。例如,来自内存的IDBConnection
支持Close
和Dispose
。
基本上,它归结为选择
示例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与using
和IDisposable
答案 4 :(得分:-3)
IDisposable
告诉GC
想要摆脱object
时该做什么。
using
要求GC
在其范围结束时删除object
使用using
object
并非IDisposable
是没用的。