0

我有一个使用 C# 类文件的站点,在文件的顶部,我有:

JTSEntities database = new JTSEntities();(一个 ADO.NET 的东西)。

我把它放在首位,因为我真的不想一遍又一遍地写同样的东西。

但它提出了一个问题......因为它在那里的顶部,它将如何被处理,以及当用户关闭页面时我如何处理(或我需要)如何处理它?

4

3 回答 3

6

保留任何包装数据库连接的时间超过需要的时间是不好的做法。

最佳做法是在当前操作(例如填充初始值等)不再需要数据库连接时立即释放数据库连接,例如类似

using (JTSEntities database = new JTSEntities())
{
    // Use database
}

如果它实现了 IDisposable。

如果由于某种原因您必须在页面期间保持其活动状态,请确保在页面关闭事件处理程序中调用适当的方法来释放资源(.Close()、.Dispose() 等)。

于 2012-07-23T23:19:08.883 回答
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.
于 2012-07-23T23:17:38.553 回答
2

好的,根据属性的类型,我们可以说它是一个instance attribute. 这意味着该属性将具有与拥有它的对象相同的生命周期,除非它的实例被传递给另一个对象。

如果它受到保护,则只有所有者对象及其子对象(即从此类继承的对象)才能访问它。如果你不将它作为引用参数传递,那么我们可以接受第一条语句:一旦对象被清理,它就会被 GC 清理。

如果您只是在常规的 web 表单页面生命周期中使用此对象,那么您不必担心处置它。页面生命周期将为您完成。

问候

于 2012-07-23T23:20:50.460 回答