gpt4 book ai didi

c# - 在 Windows 服务中为 AppDomain 指定生命周期

转载 作者:行者123 更新时间:2023-11-30 20:48:02 26 4
gpt4 key购买 nike

我有一个长期运行的 Windows 服务,它创建了两个应用程序域。根据应用程序的行为,应用程序域似乎比我希望的更早被丢弃。理想情况下,我希望应用程序域也能长时间运行(基本上永远不会清理,除非 Windows 服务关闭)。有办法做到这一点吗?

我使用调用两次的工厂方法创建应用程序域(它创建两种不同类型的对象,每个都在其自己的应用程序域中),其中包括此代码(为简单起见删除了 switch 语句)...

AppDomain appDomain = AppDomain.CreateDomain(someVariable.ToString());
return (MyObject) appDomain.CreateInstanceAndUnwrap(
typeof (MyObject).Assembly.FullName,
typeof (MyObject).FullName,
false,
BindingFlags.NonPublic | BindingFlags.Instance,
null,
new object[] {id},
null,
null);

... 其中 MyObject 继承自 MarshalByRefObject

最佳答案

这不是 AppDomain,而是 remoting lease time对于我的对象。

您可以使用 LifetimeServices 增加租用时间类(LeaseTime 属性)。有关更详尽的示例,请参阅链接文章中的图 4 为对象提供新的租赁属性:

public class MyObject : MarshalByRefObject
{
public override object InitializeLifetimeService()
{
ILease lease = (ILease)base.InitializeLifetimeService();
Debug.Assert(lease.CurrentState == LeaseState.Initial);

//Set lease properties
lease.InitialLeaseTime = TimeSpan.FromMinutes(30);
lease.RenewOnCallTime = TimeSpan.FromMinutes(10);
lease.SponsorshipTimeout = TimeSpan.FromMinutes(2);
return lease;
}
}

无论如何,我会将租用时间设置得非常长,因为我怀疑您不想定期(在续订时间)手动延长租用时间。但是,这也取决于 MyObject 在其他 AppDomain 中实际执行的操作。如果它持有一些资源或任何长期无法解决的问题,也许最好将其处理掉并在需要时重新激活它。

关于c# - 在 Windows 服务中为 AppDomain 指定生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25168526/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com