我有一种情况,我需要创建一个(可以说是脏的)浸泡测试运行器。这个想法是使用类似于Tasks或ThreadPool的方法一次运行大量的测试。应用程序域切换
问题是,它将使用很多(由我发展很差的)辅助类,它们在其中使用静态。这从来都不是一个问题,因为一切都被拆除并在使用后重新启动。这意味着当我在同一个应用程序域中启动多个线程时,它们使用相同的静态,并且事情变得麻烦。
注意:这是一个基于我一直在做的测试的假设,我不是100%确定这是问题。
我试图创建一个新的AppDomain(AppDomain.Create),然后用它(domain.CreateInstanceFromAndUnwrap)创建一个类的实例,并创建实例,我可以调用它的方法。问题是它似乎没有在新的AppDomain中运行。
下面的代码我到目前为止:
static void CallBack(BasePerfTest bpf)
{
Console.WriteLine("CurrentAppDomain (WithinCallback): {0}", Thread.GetDomain().Id);
AppDomain newdomain = AppDomain.CreateDomain(Guid.NewGuid().ToString());
//newdomain.ExecuteAssembly(".\\PerformanceTestRunner.exe", new string[] { bpf.ToString() });
ProcessRunner pr = (ProcessRunner)newdomain.CreateInstanceFromAndUnwrap(Assembly.GetExecutingAssembly().Location, "PerformanceTesting.ProcessRunner");
pr.RunProcess(bpf);
}
}
[Serializable]
public class ProcessRunner
{
public void RunProcess(BasePerfTest bpf)
{
Console.WriteLine("CurrentAppDomain (WithinPR): {0}", Thread.GetDomain().Id);
}
}
现在,我会想到的是,RunProcess()方法是在域中执行,但DOMAINID仍然是相同的,因此它击中问题静力学碰撞。
现在,我确实创建了一个单独的控制台应用程序,并且注释掉的行显示了我用来运行它的代码。此DID在新域中运行,但问题在于为什么。
我很高兴指出一些就寝时间的阅读方法,这是如何工作的,我过去的一天,我想我不应该使用正确的术语。
任何帮助,非常感谢。
感谢, 马丁
你先生,真棒。 – Martin