在另一个应用程序域中执行代码的 C# 代码?

标签 c# .net applicationdomain

我有一个程序执行 24 小时,然后重新启动。

怎么换类 main() 从进入一个单独的应用程序域,每 24 小时拆除并刷新一次,以完全消除任何潜在的内存泄漏?

最佳答案

直到你说:

in order to completely eliminate any potential memory leaks?



如果您想在另一个应用程序域中运行代码,那么有很多关于如何执行此操作的资源,例如 Executing Code in Another Application Domain (C# and Visual Basic) .基本原理是创建一个继承自MarshalByRefObject的类。 .然后,您创建新的应用程序域并指示它创建该对象的一个​​实例——这个对象就是您进入应用程序域的“入口点”:
AppDomain newAppDomain = AppDomain.CreateDomain("NewApplicationDomain");
ProxyObject proxy = (ProxyObject)newAppDomain.CreateInstanceAndUnwrap("MyAssembly", "MyNamespace.MyProxy");

然而,在 C# 中并没有真正的“内存泄漏”之类的东西,充其量你只有无意中保留在范围内的对象。如果是这种情况,那么应用程序域就有点过分了——您真正需要做的就是删除对不再需要的托管对象的引用,垃圾收集器会为您整理它们。

如果您在非托管代码中存在真正的内存泄漏,那么应用程序域也无济于事。非托管类型不受应用程序域的限制,因此当应用程序域被销毁时,不会释放在应用程序域“内部”分配的任何非托管内存。在这种情况下,最好使用单独的进程。

关于在另一个应用程序域中执行代码的 C# 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7570066/

相关文章:

c# - 将 Last 属性添加到 System.Array 的最佳方法是什么?

c# - SQL 强制应用程序加密连接

c#-4.0 - 非静态委托(delegate)的 DoCallBack CrossAppDomainDelegate 行为

c# - Linq to sql - 左外连接

c# - 如何以编程方式将标签的 ForeColor 设置为其默认值?

c# - 使用 LINQ 从字符串列表中提取整数

c# - 带有 TLS 的假 smtp 服务器

c# - 为什么 SqlDependency.OnChange 没有被触发?

c# - 在 .net 中通过 ApplicationDomain 边界实现回调

c# - 如何从 Application Directory 文本文件中读取文本文件