我有一个使用C#类文件的网站,在文件的顶部,我有:
JTSEntities database = new JTSEntities();
(ADO.NET的东西)。
我把它放在首位,因为我不想一遍又一遍地写同样的东西。
但是它提出了一个问题......因为它在那里是最重要的,它将如何处理,以及何时 - 当用户关闭页面时如何处理它(或我是否需要)?
答案 0 :(得分:6)
保持包装数据库连接的时间超过需要的时间是不好的做法。
最佳做法是在当前操作不再需要时释放数据库连接(例如填充初始值等),例如,
之类的东西using (JTSEntities database = new JTSEntities())
{
// Use database
}
如果它实现了IDisposable。
如果出于某种原因,必须在页面持续时间内保持活动状态,请确保调用适当的方法来释放资源(.Close(),. Dispose()等)在页面关闭事件处理程序。
答案 1 :(得分:2)
在此类中实现IDisposable
并在Dispose()
方法中处理此对象。使用此类时,请确保在完成后调用Dispose(最好使用using
块)
除此之外,你不必担心它。
public class MyClass : IDisposable
{
protected JTSEntities database = new JTSEntities();
public void Dispose()
{
database.Dispose();
}
}
// When calling this class
using(MyClass cls = new MyClass())
{
// Do Stuff
} // Dispose is automatically called here.
答案 2 :(得分:2)
好的,根据属性的类型,我们可以说它是instance attribute
。这意味着此属性将具有与其具有相同生命周期的生命周期,除非将其实例传递给另一个对象。
如果它受保护,那么只有所有者对象及其子对象(即从该类继承的对象)才能访问它。如果你没有将它作为参考参数传递,那么我们可以使用第一个语句:一旦清理了对象,它就会被GC清除。
如果您只是在常规的webform页面生命周期中使用此对象,那么您不必担心处置它。页面生命周期将为您完成。
此致