在appdomain中移动数据并获得良好的性能?

Hom*_*mde 6 .net plugins add-in mef appdomain

一点背景

我正在研究一个大量使用插件的.net应用程序,应用程序可以从插件中请求数据,然后由应用程序发回并显示.

首先我在MEF中实现了插件框架,但觉得它有点受限于我的目的,我希望能够隔离插件并具有一些版本控制和许可支持(因为插件可以由第三方编写).

然后开始看MAF,它似乎只支持那些场景,但是我可以看到一件可能有问题的事情,在我投入太多时间将所有内容改为MAF之前,如果有人有这个问题的经验,那将是很好的,因为我没有工作很多MAF.

问题

目前,当数据被发送回应用程序时,您将获得数据的实际对象以及说明对象包含哪些字段的适配器,您可以使用对象上的适配器来提取所需的字段.这样做的好处是您不必生成任何新的结果对象,但只需在每个对象需要时查询结果数据.

现在使用MAF存在Appdomain问题,我无法自由发送应用程序域中的所有对象,并且从每个对象的marshalbyref继承是不可行的.

我可以使用每个对象的字符串字段生成结果对象,但从性能的角度来看,它似乎不是一个好主意,界面可能只显示数百个对象中的10个,因此按需执行似乎更聪明.

我正在考虑的解决方案可能是生成一系列正对象ID,并让接口通过代理从appdomain中获取插件中的字段.所以应用程序说例如它需要插件中的项[y]的fieldname x,并且这些字符串是通过appdomain发送的.

问题

所以我的问题是,这是一个很好的方法吗,有更好的方法吗?我显然会在appdomain上移动一点性能,但由于它是按需的,只有少量的对象,它不应该太糟糕了吗?我该如何设置这样的代理对象?

抱歉,这不是世界上最容易回答的问题.我真的很感激任何见解,插件架构的未来取决于它:)

Ric*_*ner 2

.NET Remoting 是在同一进程内的两个应用程序域中运行的代码之间交换信息的最快方法。如果您的应用程序域在两个单独的进程中运行,请使用 WCF 通过命名管道交换二进制文件。

这篇论文(我最初写的论文的更新版本;))应该回答有关跨进程和跨机器性能使用哪种通信机制的问题。