【发布时间】:2013-09-12 14:25:49
【问题描述】:
我在 WPF 应用程序中使用 SQL Server Compact Edition DB。
我创建了一个到数据库的连接,并在应用程序的整个生命周期内保持打开状态 - 连接仅在应用程序退出事件触发时关闭和释放。
如果出现应用崩溃怎么办?应用进程挂掉时会自动释放连接吗?
【问题讨论】:
标签: c# wpf sql-server-ce database-connection crash
我在 WPF 应用程序中使用 SQL Server Compact Edition DB。
我创建了一个到数据库的连接,并在应用程序的整个生命周期内保持打开状态 - 连接仅在应用程序退出事件触发时关闭和释放。
如果出现应用崩溃怎么办?应用进程挂掉时会自动释放连接吗?
【问题讨论】:
标签: c# wpf sql-server-ce database-connection crash
向您的应用添加一个 UnhandeledException 处理程序,并关闭那里的全局连接(如果它仍然打开)。即使应用崩溃了,当appdomain关闭时数据库连接会喊Down,你可以通过应用崩溃来测试,看看是否可以从文件资源管理器中删除数据库文件。
【讨论】:
SQL Connection、FileStream .... 是托管代码,但它们也使用非托管非托管资源,因此它们不受 GC 的直接控制。您需要确保处置这些对象。好的做法是 using() 关键字,它会在退出作用域时调用 dispose。
如果不关闭这些资源,就会发生内存泄漏。
【讨论】:
不,当应用程序进程终止时,连接不会自动释放。不建议长时间保持活动的数据库连接。当您的应用程序频繁访问 db 时,connection pooling 是一个选项。
【讨论】: