如何在另一个 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 内的程序集中调用静态方法 [重复]
使用 JointCode.Shuttle 动态注册 / 注销服务