首页 > 解决方案 > 在 Windows 服务的 OnStop 中调用字段的 Dispose 方法

问题描述

我开发了一个使用数据库连接的 Windows 服务。

我创建了以下字段:

private MyDBEntities _db;

在 OnStart 我有:

_db = new MyDBEntities();

然后服务完成它的工作。

在 OnStop 方法中,我有:

_db.Dispose();
_db = null;

这种方法有缺点吗?出于性能原因,我需要在服务运行时始终打开数据库(即 SQL Server)。

谢谢詹姆

标签: c#entity-framework-6windows-services

解决方案


如果您的服务是访问此数据库的唯一应用程序,它不应该有任何性能下降。但是,在我看来,与数据库建立长期连接并不是最好的方法。想象一下,您没有将数据库保存在服务器上,而是使用了一些云提供商(Google、AWS、Azure)。使用云解决方案,您的服务器地址可能不是固定的,并且可能会随着时间而变化。在执行一个查询期间,IP 地址可能会发生变化(很可能,你会得到 SqlTransientException 或类似的,我不记得了)。

如果您的服务将是唯一一个访问数据库的应用程序,并且您将只有一个实例 - 那么这种方法在性能方面可能是有益的 - 因为您不必总是打开和关闭连接。但是,您必须记住,使用这种方法可能会出现许多其他问题(您可能必须从陈旧的连接重新连接,连接到其他副本实例,或者因为我目前没有考虑的事情而破坏现有连接)。此外,请记住如果您不能正确开发这种方法,多线程问题很可能会出现。

恕我直言-您应该始终在需要时打开与数据库的连接,并在使用后立即关闭。您将避免我之前提到的大多数问题。


推荐阅读