如何在另一个 AppDomain 中处理静态连接

Posted

技术标签:

【中文标题】如何在另一个 AppDomain 中处理静态连接【英文标题】:How to dispose static connections in another AppDomain 【发布时间】:2016-05-26 23:51:21 【问题描述】:

我有一个 Windows 服务应用程序,它在其他新的应用程序域中动态加载一些其他模块。问题是它们都使用相同的静态数据库连接。当我关闭服务时,我可以在主 AppDomain 中处理静态连接。但是我怎样才能立即处理其他 AppDomain 中的其他静态连接。问题是由于其他连接仍然存在,即使我完全停止它,服务应用程序仍然在任务管理器中运行。

谢谢

【问题讨论】:

【参考方案1】:

问题是它们都使用相同的静态数据库连接。

是的,这绝对是个问题。不要那样做。连接由 .NET 汇集并且创建起来并不昂贵,因此正确的模式是在需要它们时创建它们,使用它们,并在完成后处理它们。一种有效的方法是使用using 语句。

一般来说,任何创建一次性对象的东西都负责处理它。由于您的一次性物品是静态的,因此无法知道是什么负责处理它。因此,您需要有逻辑来查看它是否已被释放、是否打开、是否为空等。将所有创建和释放逻辑保存在一个地方会更简洁。

【讨论】:

您好,斯坦利,非常感谢您的回复。场景是我正在使用 rabbitMq 发送数百万条消息。我应该为每条消息创建连接并处理它吗?听起来我需要像 .net 一样创建连接池?

以上是关于如何在另一个 AppDomain 中处理静态连接的主要内容,如果未能解决你的问题,请参考以下文章

如何在另一个 AppDomain 中运行代码?我需要沙箱我的 IronPython 代码

如何从不同appdomain的类库中调用实例方法?

如何在 AppDomain 内的程序集中调用静态方法 [重复]

使用 JointCode.Shuttle 动态注册 / 注销服务

如何使用 AppDomain 限制静态类的范围以进行线程安全使用?

从 AppDomain 获取静态列表