如何在新的AppDomain

时间:2015-07-28 21:19:27

标签: c# parallel-processing appdomain

最近我发现运行编译为.exe的方法的几个实例比在f.e中运行相同的方法更快。几个新的任务。我不知道这是否适用于所有方法,但它确实从API获取数据。

我正在网上搜索如何管理它的答案。我得到了在新appDomains中尝试运行方法的答案。所以我使用我想要运行的方法创建.exe程序集(它是控制台应用程序)。我通过右键点击参考文献加载它 - >添加参考。我可以通过exeName.ClassName.Method(params)轻松访问该方法。问题是我不知道如何在新的appDomains中运行此方法。我在网上找到的每个答案都是按路径加载程序集。

除了创建AppDomain之外,我也非常乐意为您提供答案。我只想将数据传递给此方法并获得结果。

TL; DR:方法在Parallel.For(0,4,i => method())中运行比在编译的.exe文件的4个实例中运行相同的方法慢。

2 个答案:

答案 0 :(得分:0)

您可以使用IPC协议的多进程架构或在不同的域内托管您的方法。在这两种情况下,我建议使用.net远程处理wcf,因为你会为两个aproaches编写几乎相同的代码,因为与同一进程中托管的另一个应用程序域中找到的类进行对话,.net远程处理是唯一的方法(对很多人来说很遗憾)开发但不适合我)。但我几乎可以肯定,通常这不会比创建一些线程并将它们称为非同步更快。域间/进程通信必须依赖于消息序列化/反序列化,这会增加巨大的开销,特别是如果方法调用本身非常轻。

答案 1 :(得分:0)

经过一番研究并询问我找到了解决方案:

var ad = AppDomain.CreateDomain("mydomain");
ad.DoCallBack(() =>
            {
                //stuff to do
            }

将数据传递给新的AppDomain可能存在一些问题。对我来说最简单的方法是:

ad.SetData("key", value);

并在AppDomain中进行审核:

var value = (valueType)AppDomain.CurrentDomain.GetData("key");