我有一个我使用的库,它使用WCF调用http服务来获取设置.通常,第一次调用需要约100毫秒,后续调用只需几毫秒.但是我发现当我创建一个新的AppDomain时,来自该AppDomain的第一个WCF调用需要2.5秒.
有没有人解释或解决为什么在新的AppDomain中首次创建WCF频道需要这么长时间?
这些是基准测试结果(当在64位版本中没有附带调试器的情况下运行时),请注意第二组数字中的第一个连接如何延长25倍
Running in initial AppDomain
First Connection: 92.5018 ms
Second Connection: 2.6393 ms
Running in new AppDomain
First Connection: 2457.8653 ms
Second Connection: 4.2627 ms
Run Code Online (Sandbox Code Playgroud)
这不是一个完整的例子,但显示了我生成这些数字的大部分内容:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Running in initial AppDomain");
new DomainRunner().Run();
Console.WriteLine();
Console.WriteLine("Running in new thread and AppDomain");
DomainRunner.RunInNewAppDomain("test");
Console.ReadLine();
}
}
class DomainRunner : MarshalByRefObject
{
public static void RunInNewAppDomain(string runnerName)
{
var newAppDomain = AppDomain.CreateDomain(runnerName);
var runnerProxy = (DomainRunner)newAppDomain.CreateInstanceAndUnwrap(typeof(DomainRunner).Assembly.FullName, typeof(DomainRunner).FullName);
runnerProxy.Run();
}
public void Run()
{
AppServSettings.InitSettingLevel(SettingLevel.Production); …Run Code Online (Sandbox Code Playgroud)