【问题标题】:SQL Server Compact - Is the DB connection disposed when the app crashes?SQL Server Compact - 应用程序崩溃时是否释放数据库连接?
【发布时间】:2013-09-12 14:25:49
【问题描述】:

我在 WPF 应用程序中使用 SQL Server Compact Edition DB

我创建了一个到数据库的连接,并在应用程序的整个生命周期内保持打开状态 - 连接仅在应用程序退出事件触发时关闭和释放。

如果出现应用崩溃怎么办?应用进程挂掉时会自动释放连接吗?

【问题讨论】:

    标签: c# wpf sql-server-ce database-connection crash


    【解决方案1】:

    向您的应用添加一个 UnhandeledException 处理程序,并关闭那里的全局连接(如果它仍然打开)。即使应用崩溃了,当appdomain关闭时数据库连接会喊Down,你可以通过应用崩溃来测试,看看是否可以从文件资源管理器中删除数据库文件。

    【讨论】:

    • 好的,所以当应用程序崩溃时数据库连接被关闭。是我关闭连接的 AppDomain.UnhandledException 事件还是 Dispatcher.UnhandledException 事件?
    • AppDom.Unhandeled 异常
    【解决方案2】:

    SQL Connection、FileStream .... 是托管代码,但它们也使用非托管非托管资源,因此它们不受 GC 的直接控制。您需要确保处置这些对象。好的做法是 using() 关键字,它会在退出作用域时调用 dispose。

    如果不关闭这些资源,就会发生内存泄漏。

    【讨论】:

    • 我知道资源的处置和 using() 关键字。但是,如果出现应用程序崩溃怎么办?有没有为此触发的事件?我猜不会。在 PC 重新启动之前,数据库连接是否会保持活动状态?
    【解决方案3】:

    不,当应用程序进程终止时,连接不会自动释放。不建议长时间保持活动的数据库连接。当您的应用程序频繁访问 db 时,connection pooling 是一个选项。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2017-12-23
    • 2018-09-03
    • 2018-05-16
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    相关资源
    最近更新 更多